2013-07-24 57 views
1

我有兩個集合,比較它們並希望獲得不匹配的項目並放入新的集合。我不想使用2 foreach循環的傳統方法。如何使用linq和lambda表達式來實現它? 例如C#:使用Linq&Lambda獲取2個集合之間無與倫比的元素

int[] collection1 = new int[] { 1, 2, 3, 4, 5 }; 
    int[] collection2 = new int[] { 2, 3 }; 
    // Goal: Using Linq and Lambda Expression: the new collection3 should contain 1, 4, 5 

編輯:抱歉我忘記提及:collection2是collection1的子集,因此collection2中的所有元素都必須存在於collection1中。

+1

請說明:應該是什麼結果如果集合是「{1,2}」和「{2,3}」? – Henrik

+0

嗨Henrik,謝謝。我編輯過。 – MagB

回答

2
var result = collection1.Except(collection2).Concat(collection2.Except(collection1)).ToArray(); 
5

像這樣的東西?

int[] collection3 = collection1.Except(collection2).ToArray(); 
+0

我認爲你需要做另外一個'除了' –

+0

+1,完成得好;) – FSou1

2

您可以使用Enumerable.Except Method

var result = collection1.Except(collection2); 

正如在評論中提到,如果要加也從第二收集的獨特的元素,你的代碼看起來像:

var result = collection1.Except(collection2).Concat(collection2.Except(collection1)); 
3
int[] collection3 = collection1.Union(collection2).Except(collection1.Intersect(collection2)).ToArray(); 
相關問題