9
votes

Itération d'une liste de listes?

J'ai des articles d'une source donnée (peuplé de quelque part d'autre): xxx pré>

maintenant dans MyClass, j'ai des articles de plusieurs sources (peuplées d'une autre personne): P>

foreach(ItemsFromSource ifs in BunchOffItems){
    foreach(IItem i in ifs){
        //do something with i
    }
}


2 commentaires

Si itemsfromsource ISA IITEMEME que votre premier forach fonctionnera, sinon ne fonctionnera pas non plus.


Je pense que vous auriez dû dire la version de .NET que vous utilisez, car certaines personnes offrent LINQ en option, non disponibles avec toutes les versions de .NET ..


4 Réponses :


4
votes

Vous pouvez faire une fonction pour faire cela pour vous.

List<List<int>> integers = ...;
foreach (int i in magic(integers)) {
  ...
}


0 commentaires

16
votes

Eh bien, vous pouvez utiliser la fonction LINQ SelectMany pour Flatmap em> (créer des listes d'enfants et les compresser dans une même) les valeurs:

foreach(var i in BunchOfItems.SelectMany(k => k.Items)) {}


0 commentaires

0
votes
    //Used to flatten hierarchical lists
    public static IEnumerable<T> Flatten<T>(this IEnumerable<T> items, Func<T, IEnumerable<T>> childSelector)
    {
        if (items == null) return Enumerable.Empty<T>();
        return items.Concat(items.SelectMany(i => childSelector(i).Flatten(childSelector)));
    }
I think this will work for what you want to do. Cheers.

0 commentaires

5
votes

Vous pouvez utiliser SelectMany : xxx


0 commentaires