10
votes

Union une liste des listes à l'aide de LINQ

Ce n'est pas si compliqué d'une question, mais je ne peux pas envelopper ma tête autour de ma tête à Linq.

J'ai un énumérable code> contenant un énumérable Code>: P>

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

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

result.Distinct();


1 commentaires

Vous avez déjà les réponses. Je suggérerais de prendre une photo à la méthode de l'extension avec ce problème! Où vos méthodes de vulgarisation font le Selectmany et distincts de manière optimisée.


4 Réponses :


20
votes

0 commentaires

12
votes
var distinctStrings = ListOfLists.SelectMany(list => list).Distinct();

0 commentaires

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

4 commentaires

Pas besoin de cela tolis au milieu


Et si vous avez besoin de la TOLIST, faites-le après la distincte plutôt qu'auparavant. Dans ce cas, votre distinct renvoie actuellement un iEnumerable qui peut ne pas être ce que vous vouliez. En outre, il y a une mémoire / perf frappe de tolisser sur toute la liste, puis de limiter les résultats à des distincts plutôt que de faire des premiers distincts.


@Jim Woherey - Grande suggestion. Merci à vous et à Richk pour les commentaires. Nous apprenons déjà.


Merci beaucoup!!! - J'ai "intersect" une liste de listes à l'aide de LINQ - Var Résultat = ListOffistes.SelectMany (V => V) .Où (m => ListOflists.Trueforall (n => N.Contains (M))). Distinct () .Lister();



5
votes

Pour la complétude, la syntaxe d'expression de requête est parfois plus facile (je trouve) à proposer que l'invocation correcte de SelectMany . Ici, ce serait: xxx


0 commentaires