2010-01-13 14 views
13

Mam dużą listę (~ 110 000 ciągów), które muszę porównać z listą o podobnej wielkości.Najlepszy sposób porównywania dwóch dużych list ciągów przy użyciu C# i LINQ?

Lista A pochodzi z 1 systemu. Lista B pochodzi z tabeli SQL (mogę tylko czytać, brak przechowywanych procesów itd.).

Jaki jest najlepszy sposób na znalezienie wartości z listy A, której już nie ma na liście B?

Czy 100 000 ciągów to duża liczba do obsłużenia w tablicy?

dzięki

+0

Kiedy mówisz, że lista b pochodzi z tabeli sql, oznacza to, że lista b jest ładowana do pamięci, czy jest to coś w rodzaju zbioru danych czytnika sql, w którym możesz zobaczyć tylko jeden element na raz? – kemiller2002

+0

Czy używasz Linq do SQL dla swojej listy b? –

+0

Używam tableadapter, więc jest on w pamięci dla danych tabeli SQL (lista B). Lista A Odczytałem do tablicy ArrayList, ale mogłem użyć listy . – Donaldinio

Odpowiedz

26

Więc masz dwie listy tak:

List<string> listA; 
List<string> listB; 

Następnie użyj Enumerable.Except:

List<string> except = listA.Except(listB).ToList(); 

pamiętać, że jeśli chcesz, powiedzmy, zignorować przypadek:

List<string> except = listA.Except(listB, StringComparer.OrdinalIgnoreCase).ToList(); 

Ty może zastąpić ostatni parametr wybranym przez Ciebie IEqualityComparer<string>.

9

z LINQ:

var missing = listA.Except(listB).ToList(); 
+0

Nice. Podobny do tego: http://msdn.microsoft.com/en-us/library/bb397894.aspx Nie jestem przyzwyczajony do radzenia sobie z dużymi zbiorami danych, więc czy w ten sposób można łatwo obsłużyć 100 000? – Donaldinio

+0

Pewnie; a jeśli nie, będziesz musiał pracować na db, więc C# jest i tak ;-p –

2
List<string> A = //get from file 
List<string> B = //get from db 

var C = A.Except(B); 
5

Out zainteresowania, masz do wykorzystania List<string>? Ponieważ w .net 3.5 SP1 można użyć metody HashSet i ExceptWith. Moim zdaniem HashSets są specjalnie zoptymalizowane do porównań między dwoma zestawami.

+0

Nie musisz używać List . Rzucę okiem na HashSet. Dzięki! – Donaldinio

Powiązane problemy