2013-08-07 11 views
13

Mam dwóch list:Porównanie dwóch list i zwracanie różne wartości i różnice

List A {A, B, C, D} 

List B {A, E, F, G} 

muszę produkować trzy listy:

Jednym z elementów tylko w wykazie A

(B, C, D)

jeden z elementów jest jedynie w wykazie B

(E, F, G)

Jednym z elementów w obu

(A)

Biorąc pod uwagę, że listy są rzeczywiście klucze rejestru, nie może być ogromna liczba z nich, więc mogę przewidzieć ogromny narzut wydajności jeśli ja wybieram użyj tradycyjnych metod ForEach lub For (int i ...).

Nie jestem przeciwny tym, jeśli wykonają swoją pracę sprawnie, ale wolałbym używać Linq.

Czy ktoś ma jakieś pomysły?

Nie obchodzą mnie identyczne rekordy.

Utworzono już klasę IEquatable<>, która będzie porównywać elementy, ale w ten sposób można ją wykorzystać do tworzenia wymaganych wyników, z którymi walczę.

Z góry dziękuję.

Nawiasem mówiąc używam VS2012 z .NET 4.5

+0

Pokaż nam zajęcia. – Jon

Odpowiedz

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

Technicznie OP jest błędny, B jest tylko na liście A i E jest tylko na liście B, więc dwa wyjątki są różne :-) – xanatos

+1

Tak, wyjście 1 shud ma B, C, D i wyjście2 shud mają E, F, G. ... –

+0

oops, wynik z B = A, B, F, G, niewłaściwy init w moim kodzie. Zmienione wyjście :) sry za to –

5

Korzystanie LINQ

listA.Except(listB) 

To pozwoli Ci dać wszystkie pozycje w Lista, które nie są w listB ..

Dla podobne

listA.SequenceEqual(listB) 
Powiązane problemy