J'ai une liste J'ai besoin d'union de toute la liste intérieure dans une autre liste p > donc la liste im utilisant Y a-t-il un moyen de le faire en utilisant aidez-moi à faire cela. p> merci d'avance. p> p>
> code>, et laquelle contient
résultante
pour la boucle code> pour le faire p>
linq code> ou
lambda expression code>. p>
6 Réponses :
List<List<string>> collections = new List<List<string>>() { new List<string>(){"A" , "B" }, new List<string>() {"C" , "D" } }; var list = collections.SelectMany(x => x).ToList(); SelectMany builds up a expression tree that when evaluated flattens the list of list to a single list of combined members.ToList forces the expression tree to be evaluated and which results in a List.If you want to eliminate duplicates you can add a Distinct call before the call to 'ToList()'
Vous pouvez utiliser le SelectMany extension Méthode.
List<List<String>> masterList = { {"A" , "B" }, {"C" , "D" } }; IEnumerable<string> results = masterList.SelectMany(l => l);
N'entraîne pas une liste
Ne peut utiliser que des expressions d'initialisation Array pour affecter des types de réseau. Essayez d'utiliser une nouvelle expression à la place.
Cette réponse ne tient pas compte des doublons. Pas un syndicat de listes.
var result = myLists.SelectMany(l => l);
Cette réponse ne tient pas compte des doublons. Pas un syndicat de listes.
@Brian: L'OP a ajouté les exigences duplicats après la publication de cette réponse.
L'OP a demandé comment syndicaliser toutes les listes. L'opérateur de l'Union, par définition, exclut les doublons. Cela est vrai à la fois en théorie définie et dans la mise en œuvre de l'Union à Linq. Votre solution ne donne pas l'union des ensembles. Il donne les ensembles concaténés ensemble. C'est différent.
Pas exactement un syndicat, mais vous pouvez essayer ce
En fait, l'Union est vraiment juste concat (). Distinct (). Au lieu de Concat, vous utilisez SelectMany car il s'agit d'une liste de listes ... Alors ... En d'autres termes ... C'est la seule réponse correcte que je vois ici. Toutes les autres réponses négligent qu'il peut y avoir des duplicats. L'OP veut un syndicat qui se débarrasse des dupes.
Est-ce que .NET fournit la fonction d'identité quelque part dans la BCL? Haskell et Scala l'ont à la fois (et à Ruby, je l'ajoutais toujours moi-même), et cela facilite la lecture du code, IMHO. En rubis, ce qui précède serait à peu près votre_list.flat_map {| L | l} .uniq code>, mais avec la définition suivante
identité = -> x {x} code> il pourrait être écrit comme
votre_list.flat_map (& identité) code>. Dans Scala, ce serait
votre identité de colonnette de flatmap dans HASKELL
Yourlist >> = id code>, qui est beaucoup plus facile à lire que
Toiliste Flatmap (E => E) code> ou
votrelist >> = \ x -> x code>. Y a-t-il
yourlist.selectmany (identité) code>?
Que diriez-vous d'agréger? Pour moi, c'est plus expressif que d'utiliser SelectMany, car il vous dit exactement ce que vous faites: Agrégez votre liste de listes en appelant Union sur eux tous. strong> p> p>
+1 ... je suis d'accord avec toi ... c'est plus expressif que SelectMany
Juste pour des coups de pied: Ceci est bien sûr la même solution que @Alexander Taran, juste avec la syntaxe de requête au lieu de la syntaxe de Lambda. (Ou au moins cela devrait être - je n'ai pas mon Linqpad Handy.) P> P>
Et s'il existe des doublons dans vos listes?
Effectuer une opération syndicale dans la liste jettera les duplicats