Mam pytanie IGrouping
i Select()
metodę.
Powiedzmy, że mam IEnumerable<IGrouping<int, smth>>
w ten sposób:
var groups = list.GroupBy(x => x.ID);
gdzie list
jest List<smth>
.
A teraz muszę IGrouping
w jakiś sposób przekazać wartości każdej z nich na inną listę:
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
Czy ktoś może zasugerować, jak uzyskać wartości ( List<smth>
) z IGrouping<int, smth>
takiego kontekstu?
Odpowiedzi:
Ponieważ
IGrouping<TKey, TElement>
narzędzia są używaneIEnumerable<TElement>
, możeszSelectMany
połączyć wszystkie elementyIEnumerables
w jednoIEnumerable
:źródło
groups
i powrotu do płaskiej listy.OrderBy(x => x.id)
posortuje je w porządku rosnącym według identyfikatora. Porównaj to z.GroupBy(x => x.id).SelectMany(group => group)
, co posortuje je według kolejności pierwszego pojawienia się ID. Jeśli oryginalne identyfikatory są w kolejności: [1,3,2,2,2,3,0], wówczas grupowanie ich, a następnie spłaszczanie na jednej liście spowoduje umieszczenie identyfikatorów w nowej kolejności: [1,3,3, 2,2,2,0].Najpierw musisz wybrać żądaną grupę. Następnie możesz użyć
ToList
metody z grupy. JestIGrouping
to jednaIEnumerable
z wartości.źródło
Bardziej wyjaśniona wersja powyższych odpowiedzi:
źródło
Z definicji IGrouping:
możesz po prostu iterować takie elementy:
źródło