Anggapkan bahawa terdapat struktur data pokok berlapis yang diwakili oleh kelas
, masing -masing mempunyai nod induk, koleksi sub -node, dan sekumpulan pengenalpastian
MyNode
cabaran
Matlamatnya adalah untuk mendapatkan senarai semua objek , termasuk nod induk dan sub -nodes, sebagai satu senarai rata. Walau bagaimanapun, hanya nod harus dimasukkan ke dalam senarai hasil.
penyelesaian MyNode
group == 1
Ekspresi ini adalah rekursif di seluruh struktur pokok, dan pameran itu diratakan sebagai satu senarai. Ia memilih semua sub -node nod yang diberikan dan panggilan
untuk menghasilkan rekursif. Kemudian sambungkan urutan ini ke nod semasa untuk menghasilkan jadual penggabungan.penapis
IEnumerable<MyNode> Flatten(IEnumerable<MyNode> e) => e.SelectMany(c => Flatten(c.Elements)).Concat(e);
Flatten
Apabila pokok itu diratakan, anda boleh menggunakan senarai penapis kaedah
.
<加> Peningkatan gaya tambahan Where(...)
group == 1
Untuk meningkatkan kebolehbacaan,
var result = flattenedNodes.Where(n => n.group == 1);
<泛> pelaksanaan yang dijumpai
Untuk umumnya proses rata, ia boleh membuat kaedah pengembangan generik.
Flatten
public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> e) => e.SelectMany(c => c.Elements.Flatten()).Concat(e);
Atas ialah kandungan terperinci Bagaimana untuk meratakan struktur pokok hierarki ke dalam senarai rata menggunakan Linq?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!