2010-02-25 5 views
11

Lassen Sie uns sagen, ich habe diese beiden Arrays:C# Array Merge Ohne Dupes

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

Wie würde ich sie fusionieren, wie so eine dritte Reihe zu bekommen: string[3]{"Hello", "Stack", "Overflow"}?

Antwort

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

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

Beachten Sie, dass diese .NET 3.5 und LINQ erfordert. – jrista

+3

@jrista - * strikt * sprechen, nicht ganz richtig. Es könnte jeder C# 3.0-Compiler sein, der auf .NET 2.0 mit (zum Beispiel) LINQBridge abzielt. Keine .NET 3.5-Anforderung. Und wenn Sie Ihre eigene Erweiterungsmethode verwenden, kann sie überall hin gehen, so dass "LINQ" selbst in den "using" -Direktiven nicht erwähnt wird. –

+1

@Mark: Sicher, * streng * sprechen. Für den durchschnittlichen .NET-Programmierer halte ich meine Aussage jedoch für richtig und akzeptabel. (Ich denke, mehr Leute würden auf .NET 3.5 upgraden, bevor sie ein Framework von Drittanbietern wie LINQBridge verwenden oder ihr eigenes Inhouse-Framework rollen ...) – jrista

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

(wenn Sie LINQ und eine using System.Linq; Richtlinie)

0

Old Weg, um diese

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

Neue und bessere Art und Weise zu tun, verwenden. Net Framework 3.5 + LINQ

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

Für den "alten Weg" ist 'ToList' nicht verfügbar. Verwenden Sie 'List temp = new Liste (arr1);' stattdessen. –

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