J'ai une question sur IGrouping
la Select()
méthode.
Disons que j'en ai un IEnumerable<IGrouping<int, smth>>
de cette façon:
var groups = list.GroupBy(x => x.ID);
où list
est a List<smth>
.
Et maintenant, je dois passer les valeurs de chacun IGrouping
à une autre liste d'une manière ou d'une autre:
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
Quelqu'un peut-il suggérer comment obtenir les valeurs ( List<smth>
) d'un IGrouping<int, smth>
dans un tel contexte?
Réponses:
Depuis les
IGrouping<TKey, TElement>
implémentationsIEnumerable<TElement>
, vous pouvez utiliserSelectMany
pour mettre tout leIEnumerables
dos en unIEnumerable
tout:la source
groups
et de revenir à une liste plate.OrderBy(x => x.id)
par ordre croissant par ID. Comparez cela avec.GroupBy(x => x.id).SelectMany(group => group)
, qui les triera par ordre de première apparition d'ID. Si les ID d'origine sont dans l'ordre: [1,3,2,2,2,3,0], puis en les regroupant puis en les aplatissant dans une seule liste, les ID seront placés dans le nouvel ordre: [1,3,3, 2,2,2,0].Vous devez d'abord sélectionner le groupe souhaité. Ensuite, vous pouvez utiliser la
ToList
méthode de sur le groupe. C'estIGrouping
uneIEnumerable
des valeurs.la source
Version plus clarifiée des réponses ci-dessus:
la source
De la définition de IGrouping:
vous pouvez simplement parcourir des éléments comme celui-ci:
la source