2010-02-25 21 views
11

Digamos que tengo estas dos matrices:C# matriz Combinar Sin duplicados

string[] arr1 = new string[2]{"Hello", "Stack"} 
string[] arr2 = new string[2]{"Stack", "Overflow"} 

¿Cómo les fusionarse para obtener una tercera serie de este modo: string[3]{"Hello", "Stack", "Overflow"}?

Respuesta

12
string[] arr1 = new string[2]{"Hello", "Stack"}; 
string[] arr2 = new string[2] { "Stack", "Overflow" }; 

var arr3 = arr1.Union(arr2).ToArray<string>(); 
+2

Tenga en cuenta que esto requiere .NET 3.5 y LINQ. – jrista

+3

@jrista - * estrictamente * hablando, no del todo cierto. Podría ser cualquier compilador de C# 3.0 dirigido a .NET 2.0 con (por ejemplo) LINQBridge. Sin requisito de .NET 3.5. Y si transfiere su propio método de extensión podría ir a cualquier parte, por lo que no se mencionaría "LINQ", incluso en las directivas 'using'. –

+1

@Mark: seguro, * estrictamente * hablando. Sin embargo, para el programador .NET promedio, creo que mi afirmación es cierta y es perfectamente aceptable. (Creo que más personas actualizarían a .NET 3.5 antes de elegir un marco de terceros como LINQBridge o implementar su propio marco interno ...) – jrista

2
string[] arr3 = arr1.Union(arr2).ToArray(); 

(si tiene LINQ y una directiva using System.Linq;)

0

vieja manera de hacer esto

  List<string> temp = arr1.ToList<string>(); 
      foreach (string s in arr1) 
      { 
       if (!arr2.Contains(s)) 
       { 
        temp.Add(s); 
       } 
      } 
      String[] arr3 = temp.ToArray<string>(); 

nueva y mejor manera, utilizando. Net Framework 3.5 + LINQ

string[] arr3 = arr1.Union(arr2).ToArray(); 
+0

Para el "método antiguo", "Lista" no está disponible. Use 'List temp = new List (arr1);' en su lugar. –

0
ar2.Union<string>(ar1, StringComparer.CurrentCultureIgnoreCase).ToArray<string>(); 
Cuestiones relacionadas