Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Linq dapat meratakan struktur pokok dan penapis oleh harta tertentu?

Bagaimanakah Linq dapat meratakan struktur pokok dan penapis oleh harta tertentu?

Mary-Kate Olsen
Lepaskan: 2025-01-29 00:56:12
asal
767 orang telah melayarinya

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

Gunakan linq untuk menunjukkan struktur pokok rata

Dalam pembangunan perisian, data yang menjadi tisu ke dalam struktur seperti pokok sering diperlukan. Tugas yang sama adalah untuk menukar pokok ke senarai rata atau set. Ini boleh dilaksanakan menggunakan rangka kerja pertanyaan integrasi bahasa (LINQ) dalam .NET.

dengan mengandaikan bahawa kita mempunyai struktur pokok mudah berikut yang dinyatakan oleh kelas MyNode:

Kami mendapat ienumeration
<code class="language-csharp">class MyNode
{
    public MyNode Parent;
    public IEnumerable<MyNode> Elements;
    public int Group { get; set; }
}</code>
Salin selepas log masuk
dan ingin mendapatkan senarai semua nod (termasuk nod dalaman) di dalam pokok sebagai senarai rata tunggal. Di samping itu, kami berharap dapat menapis senarai ini, hanya nod dengan atribut kumpulan yang sama dengan 1.

Untuk menunjukkan struktur seperti pokok, kita boleh menggunakan pengkomputeran selectmany Linq untuk mengambil semua keturunan setiap nod. Kaedah lanjutan berikut diperolehi dan unsur -unsur input tersedia dan atribut unsur -unsur mereka diratakan secara rekursif:

Untuk mengikuti senarai leflation kumpulan, kita boleh menggunakan pengendali di mana:
<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> elements) =>
    elements.SelectMany(c => Flatten(c.Elements)).Concat(elements);</code>
Salin selepas log masuk

Penyelesaian ini berkesan dan elegan diratakan, dan nod yang tidak diingini ditapis mengikut atribut kumpulan.
<code class="language-csharp">var flattenedList = treeElements.Flatten().Where(node => node.Group == 1);</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Linq dapat meratakan struktur pokok dan penapis oleh harta tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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