2010-02-25 2 views
11

Допустим, у меня есть эти два массива:C# Массив Merge Без Повторные

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

Как бы объединить их, чтобы получить третий массив так: string[3]{"Hello", "Stack", "Overflow"}?

ответ

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

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

Обратите внимание, что для этого требуется .NET 3.5 и LINQ. – jrista

+3

@jrista - * строго говоря, не совсем так. Это может быть любой компилятор C# 3.0, предназначенный для .NET 2.0 с (например) LINQBridge. Нет требования .NET 3.5. И если вы откатите свой собственный метод расширения, он может пойти куда угодно, поэтому не упоминается «LINQ», даже в директивах 'use'. –

+1

@Mark: Конечно, * строго говоря. Однако для среднего .NET-программиста я считаю, что мое утверждение верно и вполне приемлемо. (Я думаю, что больше людей перейдут на .NET 3.5, прежде чем они выберут стороннюю инфраструктуру, такую ​​как LINQBridge, или свернут собственную собственную инфраструктуру ...) – jrista

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

(если у вас есть LINQ и using System.Linq; директиву)

0

Старый способ сделать это

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

новый и лучший способ, используя. Net Framework 3.5 + LINQ

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

Для «старого пути» «ToList» недоступен. Используйте 'List temp = new Список (arr1);' вместо этого. –

0
ar2.Union<string>(ar1, StringComparer.CurrentCultureIgnoreCase).ToArray<string>(); 
Смежные вопросы