Gunakan struktur pokok berbentuk rata linq dan penapis mengikut atribut
Dalam bidang data berbentuk pokok, sering diperlukan untuk menukar struktur hierarki ke senarai rata. Katakan anda mempunyai kelas berlapis dengan atribut ibu bapa dan elemen, dan anda ingin meratakan pokok dengan mengeluarkan semua contoh Mynode dalam satu senarai. Khususnya, anda hanya berminat untuk mendapatkan nod yang sama dengan 1 dalam kumpulan.
pertanyaan LINQ berikut memberikan anda penyelesaian:
<code class="language-c#">var flatList = rootNodes.SelectMany(node => Flatten(node.Elements)).Concat(rootNodes).Where(node => node.group == 1);</code>
Berikut adalah prinsip kerja:
selectMany (node = & gt; flatten (node.elements)) - : Kaedah ini secara rekursif meratakan koleksi unsur -unsur setiap myNode untuk mendapatkan senarai rata semua anak.
concat (rootNodes)
: Sambungkan senarai rata keturunan ke senarai MyNodes asal. -
where (node = & gt; node.group == 1) : Penapis senarai rata, yang hanya mengandungi nod dengan atribut kumpulan 1.
-
Untuk meningkatkan kebolehbacaan kod, sila pertimbangkan menggunakan kaedah pengembangan untuk meratakan:
kemudian gunakan kaedah pengembangan panggilan pokok anda, dan tentukan cara mengambil anak:
<code class="language-c#">public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f) => e.SelectMany(c => f(c).Flatten(f)).Concat(e);</code>
Nikmati faedah yang dibawa oleh penggunaan data tahap rata LINQ!
Atas ialah kandungan terperinci Bagaimanakah saya dapat meratakan struktur pokok dan penapis oleh harta yang menggunakan linq?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn