Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya dapat meratakan struktur pokok dan penapis oleh harta yang menggunakan linq?

Bagaimanakah saya dapat meratakan struktur pokok dan penapis oleh harta yang menggunakan linq?

Patricia Arquette
Lepaskan: 2025-01-29 00:51:14
asal
289 orang telah melayarinya

How Can I Flatten a Tree Structure and Filter by a Property Using LINQ?

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:

var flatList = rootNodes.SelectMany(node => Flatten(node.Elements)).Concat(rootNodes).Where(node => node.group == 1);
Salin selepas log masuk
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:

public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f) => e.SelectMany(c => f(c).Flatten(f)).Concat(e);
Salin selepas log masuk
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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan