2013-08-07 210 views
13

我有兩個列表:比較兩個列表,並返回不同的值,差異

List A {A, B, C, D} 

List B {A, E, F, G} 

我需要製作三個列表:

一個與該項目在名單A

( B,C,d)

一個與項目僅在列表乙

(E,F,G)

之一,在項目雙方

(A)

鑑於名單實際上是註冊表項,有可能是其中的一個龐大的數字,所以我可以預見一個巨大的性能開銷,如果我選擇使用傳統的ForEach或For(int i ...)方法。

我不反對這些,如果他們將有效地做這項工作,但我寧願使用Linq。

有沒有人有任何想法?

我不在乎相同的記錄。

我已經創建了一個IEquatable<>類來比較元素,但它是如何使用它來創建我所需要的輸出,我正在努力。

在此先感謝。

通過我使用與.NET 4.5

+0

向我們展示所涉及的類。 – Jon

回答

18
var A = new List<string>() { "A", "B", "C", "D" }; 
var B = new List<string>() { "A", "E", "F", "G" }; 

A.Except(B).ToList() 
// outputs List<string>(2) { "B", "C", "D" } 
B.Except(A).ToList() 
// outputs List<string>(2) { "E", "F", "G" } 
B.Intersect(A).ToList() 
// outputs List<string>(2) { "A" } 
+0

技術上OP是錯誤的,B只在列表A中,而E只在列表B中,所以兩個例外不同:-) – xanatos

+1

是的output1 shud有B,C,D和output2 shud有E,F,G。 ... –

+0

oops,輸出來自B = A,B,F,G,在我的代碼中有錯誤的init。改變輸出:)對此,sry –

5

VS2012的方式使用LINQ

listA.Except(listB) 

這會給你所有listA的不在數組listB的項目..

對於類似

listA.SequenceEqual(listB) 
相關問題