280 votes

Fusionner deux (ou plusieurs) listes en un seul, en C# .NET

Est-il possible de convertir deux ou plusieurs listes dans une liste unique, en .NET en utilisant c# ?

Par exemple,

512voto

Jon Skeet Points 692016

Vous pouvez utiliser LINQ Concat et ToList méthodes:

var allProducts = productCollection1.Concat(productCollection2)
                                    .Concat(productCollection3)
                                    .ToList();

Notez qu'il existe des moyens plus efficaces pour ce faire, la ci-dessus sera essentiellement en boucle sur toutes les entrées, la création d'un dynamiquement la taille du tampon. Comme vous pouvez prédire la taille pour commencer, vous n'avez pas besoin de cette dynamique de dimensionnement... de sorte que vous pourriez utiliser:

var allProducts = new List<Product>(productCollection1.Count +
                                    productCollection2.Count +
                                    productCollection3.Count);
allProducts.AddRange(productCollection1);
allProducts.AddRange(productCollection2);
allProducts.AddRange(productCollection3);

(AddRange est spécial-étui pour ICollection<T> d'efficacité.)

Je ne voudrais pas prendre cette approche à moins de vraiment bien.

46voto

Ani Points 59747

En supposant que vous voulez une liste contenant tous les produits pour la catégorie spécifiée-Id, vous pouvez traiter votre requête comme une projection suivie d'un aplatissement de l' opération. Il y a une LINQ opérateur qui fait que: SelectMany.

// implicitly List<Product>
var products = new[] { CategoryId1, CategoryId2, CategoryId3 }
                     .SelectMany(id => GetAllProducts(id))
                     .ToList();

En C# 4, vous pouvez raccourcir le SelectMany: .SelectMany(GetAllProducts)

Si vous avez déjà des listes représentant les produits pour chaque Id, puis ce que vous avez besoin est une concaténation, comme d'autres, point.

26voto

Botz3000 Points 23640

vous pouvez les combiner à l’aide de LINQ :

l’approche plus traditionnelle de l’utilisation de `` serait bien plus efficace.

14voto

StuartLC Points 35534

Jetez un oeil sur List.AddRange pour fusionner des listes

8voto

Darin Dimitrov Points 528142

Vous pouvez utiliser la méthode d'extension Concat :

 var result = productCollection1
    .Concat(productCollection2)
    .Concat(productCollection3)
    .ToList();
 

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