web-dev-qa-db-fra.com

Comment fusionner une liste de listes avec le même type d’éléments en une seule liste d’éléments?

La question est déroutante, mais elle est beaucoup plus claire comme décrit dans les codes suivants:

   List<List<T>> listOfList;
   // add three lists of List<T> to listOfList, for example
   /* listOfList = new {
        { 1, 2, 3}, // list 1 of 1, 3, and 3
        { 4, 5, 6}, // list 2
        { 7, 8, 9}  // list 3
        };
   */
   List<T> list = null;
   // how to merger all the items in listOfList to list?
   // { 1, 2, 3, 4, 5, 6, 7, 8, 9 } // one list
   // list = ???

Vous ne savez pas si cela est possible en utilisant C # LINQ ou Lambda?

Comment puis-je concaténer ou " aplatir " une liste de listes?

184
David.Chu.ca

Utilisez la méthode d'extension SelectMany

list = listOfList.SelectMany(x => x).ToList();
401
JaredPar

Est-ce que tu veux dire ça?

var listOfList = new List<List<int>>() {
    new List<int>() { 1, 2 },
    new List<int>() { 3, 4 },
    new List<int>() { 5, 6 }
};
var list = new List<int> { 9, 9, 9 };
var result = list.Concat(listOfList.SelectMany(x => x));

foreach (var x in result) Console.WriteLine(x);

Résulte en: 9 9 9 1 2 3 4 5 6

12
IRBMe

Voici la version de la syntaxe intégrée C #:

var items =
    from list in listOfList
    from item in list
    select item;
11
Joe Chung

Pour List<List<List<x>>> et ainsi de suite, utilisez

list.SelectMany(x => x.SelectMany(y => y)).ToList();

Cela a été posté dans un commentaire, mais cela mérite une réponse séparée à mon avis.

1
Arman McHitarian