2011-09-07 17 views
6

Non è una domanda complicata, ma non riesco a spiegarmelo in linq.Unione Un elenco di elenchi che utilizzano Linq

Ho un Enumerable<T> contenente un Enumerable<string>:

public class 
{ 
    List<List<string>> ListOfLists = new List<List<string>>(); 
} 

Io fondamentalmente voglio tornare ogni stringa univoca da ListOfLists; questo è facile utilizzando un ciclo foreach e una variabile di memoria (probabilmente ho potuto migliorare l'efficienza di non avere la distinta proprio alla fine, ma non è questo il punto):

List<string> result = new List<string>(); 

foreach (var v in ListOfLists) 
{ 
    foreach (var s in v) 
    { 
     result.Add(s); 
    } 
} 

result.Distinct(); 

Come posso fare questo con LINQ?

+0

Hai già le risposte. Suggerirei di fare una ripresa con il metodo Extension con questo problema! Dove i tuoi metodi di estensione seleziona SelectMany e Distinct in modo ottimizzato. –

risposta

8
var distinctStrings = ListOfLists.SelectMany(list => list).Distinct(); 
1
var result = ListOfLists.SelectMany(v => v).ToList().Distinct(); 

EDIT: Per migliorare le prestazioni, l'uso:

var result = ListOfLists.SelectMany(v => v).Distinct(); 

o

var result = ListOfLists.SelectMany(v => v).Distinct().ToList(); 
+0

Non c'è bisogno di quell'elenco delle cose nel mezzo – RichK

+0

E se hai avuto bisogno della ToList, fallo dopo Distinct piuttosto che prima. In questo caso, il tuo Distinto ora restituisce un oggetto IEnumerable che potrebbe non essere quello che volevi. Inoltre, c'è un colpo di memoria/perf per fare ToList sull'intero elenco e quindi limitare i risultati a Distinct piuttosto che fare Distinct prima. –

+0

@Jim Wooley - ottimo suggerimento. Grazie a te e RichK per il feedback. Abbiamo già imparato. – Leons

5

Per completezza, la sintassi delle espressioni di query a volte è più facile (ho trovato) per venire con la corretta invocazione di SelectMany. Qui sarebbe:

result = (from list in ListOfLists 
      from s in list 
      select s).Distinct().ToList(); 
+0

+1 per la sintassi della query su SelectMany –

Problemi correlati