2013-08-07 9 views
13

Ho due liste:Confronto di due elenchi e restituzione dei valori distinti e le differenze

List A {A, B, C, D} 

List B {A, E, F, G} 

ho bisogno di produrre tre liste:

Uno con gli articoli solo dell'elenco A

(B, C, D)

Uno con gli articoli soltanto in elenco B

(E, F, G)

Uno con gli elementi in entrambe

(A)

Dato che le liste sono in realtà le chiavi di registro, ci potrebbe essere un numero enorme di loro in modo da poter prevedere un enorme sovraccarico di prestazioni se scelgo di utilizzare metodi tradizionali ForEach o For (int i ...).

Non sono contrario a questi se faranno il lavoro in modo efficiente ma preferirei usare Linq.

Qualcuno ha qualche idea?

Non mi importa di record identici.

Ho già creato una classe IEquatable<> che confronterà gli elementi, ma è come utilizzarla per creare i miei output richiesti con cui sto lottando.

Grazie in anticipo.

Tra l'altro sto usando VS2012 con .NET 4.5

+0

Mostraci le classi coinvolte. – Jon

risposta

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

Tecnicamente l'OP è sbagliato, B è solo nella lista A ed E è solo nella lista B, quindi i due Eccetto sono diversi :-) – xanatos

+1

Sì, l'output1 shud ha B, C, D e output2 shud hanno E, F, G. ... –

+0

oops, uscita da B = A, B, F, G, init errato nel mio codice. Uscita modificata :) sry per quello –

5

Utilizzando LINQ

listA.Except(listB) 

Questo vi darà tutti gli elementi nell'elencoA che non sono in elencoB ..

Per simile

listA.SequenceEqual(listB) 
Problemi correlati