Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk meratakan struktur pokok hierarki ke dalam senarai rata menggunakan Linq?
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
<code class="language-csharp">IEnumerable<MyNode> Flatten(IEnumerable<MyNode> e) => e.SelectMany(c => Flatten(c.Elements)).Concat(e);</code>
Flatten
Apabila pokok itu diratakan, anda boleh menggunakan senarai penapis kaedah
.
Peningkatan gaya tambahan Where(...)
group == 1
Untuk meningkatkan kebolehbacaan,
<code class="language-csharp">var result = flattenedNodes.Where(n => n.group == 1);</code>
pelaksanaan yang dijumpai
Untuk umumnya proses rata, ia boleh membuat kaedah pengembangan generik.
Flatten
<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> e) => e.SelectMany(c => c.Elements.Flatten()).Concat(e);</code>3
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!