Saya punya pertanyaan tentang IGrouping
dan Select()
metode.
Katakanlah saya punya IEnumerable<IGrouping<int, smth>>
cara seperti ini:
var groups = list.GroupBy(x => x.ID);
dimana list
a List<smth>
.
Dan sekarang saya perlu memberikan nilai masing-masing IGrouping
ke daftar lain dengan beberapa cara:
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
Adakah yang bisa menyarankan cara mendapatkan nilai ( List<smth>
) dari IGrouping<int, smth>
dalam konteks seperti itu?
Jawaban:
Sejak
IGrouping<TKey, TElement>
diterapkanIEnumerable<TElement>
, Anda dapat menggunakannyaSelectMany
untuk menggabungkan semuanyaIEnumerables
menjadi satuIEnumerable
:sumber
groups
dan kembali ke daftar datar.OrderBy(x => x.id)
akan mengurutkannya dalam urutan naik dengan ID. Bandingkan dengan ini.GroupBy(x => x.id).SelectMany(group => group)
, yang akan mengurutkannya berdasarkan urutan tampilan ID pertama. Jika ID asli berada dalam urutan: [1,3,2,2,2,3,0], maka mengelompokkannya dan kemudian meratakannya dalam satu daftar akan menempatkan ID tersebut dalam urutan baru: [1,3,3, 2,2,2,0].Pertama, Anda perlu memilih grup yang diinginkan. Kemudian Anda dapat menggunakan
ToList
metode pada grup. TheIGrouping
adalahIEnumerable
nilai-nilai.sumber
Versi yang lebih jelas dari jawaban di atas:
sumber
Dari definisi IGrouping:
Anda bisa beralih melalui elemen seperti ini:
sumber