29 votes

Comment combiner 2 listes avec LINQ?

Env. .NET4 C #

Salut à tous,

Je veux combiner ces 2 listes: { "A", "B", "C", "D" } et { "1", "2", "3" }

dans celui-ci:

 { "A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3", "D1", "D2", "D3" }
 

Évidemment, je pourrais utiliser des boucles imbriquées. Mais je me demande si LINQ peut vous aider. Pour autant que je comprends, Zip () n'est pas mon ami dans ce cas, non?

TIA,

59voto

Ian Mercer Points 19271

Utilisez SelectMany lorsque vous souhaitez former le produit cartésien de deux listes:

aList.SelectMany(a => bList.Select(b => a + b))

37voto

Ani Points 59747

Essentiellement, vous souhaitez générer un produit cartésien, puis concaténer les éléments de chaque 2-tuple. C'est plus simple à faire dans la syntaxe de requête:

 var cartesianConcat = from a in seq1
                      from b in seq2
                      select a + b;
 

25voto

Jon Skeet Points 692016

SelectMany est certainement la bonne approche, que ce soit à l'aide de plusieurs "à partir de" clauses ou par un appel direct, mais ici, c'est une alternative à Hightechrider de l'utilisation de celui-ci:

var result = aList.SelectMany(a => bList, (a, b) => a + b);

Personnellement, je trouve cela plus facile à comprendre car il est plus proche du "multiple" version: un "a" dans "accédez à la liste", nous produisons une nouvelle séquence - dans ce cas, il est toujours "bList". Pour chaque (a, b) paire produite par la rupture Cartésienne rejoindre, nous avons projet de à un résultat qui est juste la concaténation des deux.

Juste pour être clair: les deux approches. Je préfère juste celui-ci :)

Quant à savoir si c'est plus clair que la syntaxe d'expression de requête... je ne suis pas sûr. J'ai généralement utiliser les appels de méthode quand il est juste un cas d'utilisation d'un seul opérateur, mais pour l' Join, GroupJoin, SelectMany et GroupBy, les expressions de requête n'simplifier les choses. Essayer les deux et voir lequel vous trouvez plus lisible :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X