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
Mary-Kate Olsenasal
2025-01-29 00:56:12805semak imbas

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>
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>

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>

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!

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