Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Linq dapat meratakan data hierarki dan penapis dengan cekap dengan nilai harta tertentu?

Bagaimanakah Linq dapat meratakan data hierarki dan penapis dengan cekap dengan nilai harta tertentu?

Susan Sarandon
Susan Sarandonasal
2025-01-29 01:01:09545semak imbas

How Can LINQ Efficiently Flatten Hierarchical Data and Filter by a Specific Property Value?

Gunakan data tahap rata LINQ

Di dalam struktur data seperti pokok, senarai rata nod sering diperlukan dari tahap bersarang. Sebagai contoh, pertimbangkan objek "MyNode" dengan atribut "Elemen", yang mengandungi koleksi sub -node. Untuk mendapatkan senarai rata dengan semua nod dengan nilai atribut tertentu, Linq menyediakan penyelesaian yang elegan.

penyelesaian

untuk meratakan pokok dalam pertanyaan linq dan skrin nilai atribut tertentu, sila ikuti langkah -langkah di bawah:

Berikut adalah penjelasan terperinci:

<code class="language-csharp">// 扁平化树
IEnumerable<mynode> flatTree = e.SelectMany(c => Flatten(c.Elements)).Concat(new[] { e });

// 按属性值筛选扁平化列表
var result = flatTree.Where(n => n.group == 1);</code>

flatten (c.elements):

Bahagian sub -node setiap nod dalam koleksi asal rekursif.
  • concat (new [] {e}): ini melampirkan nod semasa ke senarai sub -node rata.
  • where (n = & gt; n.group == 1):
  • Skrin klausa ini, yang hanya termasuk nod dengan nilai "kumpulan".
  • versi kaedah lanjutan
  • Untuk meningkatkan kebolehbacaan kod, anda boleh menukar fungsi rata ke kaedah pengembangan:

Versi generik pokok tersuai

Untuk pokok yang berbeza dari "Mynode", anda boleh menggunakan versi generik fungsi rata.

Penggunaan contoh
<code class="language-csharp">public static IEnumerable<mynode> Flatten(this IEnumerable<mynode> e) =>
    e.SelectMany(c => c.Elements.Flatten()).Concat(e);</code>

untuk meratakan pokok "mynode" dan skrin nod "kumpulan" sama dengan 1:

Dengan memahami konsep rata pokok dan operasi Linq yang kuat, anda dapat mengekstrak dan mengendalikan data dengan cekap dari struktur hierarki kompleks.

Atas ialah kandungan terperinci Bagaimanakah Linq dapat meratakan data hierarki dan penapis dengan cekap dengan nilai 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