Rumah >pembangunan bahagian belakang >C++ >Bagaimana saya boleh meratakan struktur pokok ke dalam senarai satu peringkat menggunakan linq?
menggunakan linq untuk meratakan struktur pokok ke dalam satu senarai
Linq menawarkan penyelesaian yang elegan untuk struktur seperti pokok-struktur-struktur di mana nod mengandungi unsur-unsur kanak-kanak-ke dalam senarai satu peringkat. Ini memudahkan lelaran ke atas semua nod, tanpa mengira kedalaman hierarki mereka.
Proses meratakan
Berikut adalah kaedah berasaskan Linq untuk mencapai ini:
<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> e) { return e.SelectMany(c => c.Elements.Flatten()).Concat(e); }</code>Fungsi rekursif ini dengan cekap meratakan pokok. Ia berfungsi dengan memilih semua elemen kanak -kanak (
) untuk setiap nod, rekursif meratakan kanak -kanak itu, dan kemudian menggabungkan kanak -kanak yang diratakan dengan nod asal. c.Elements
Penapisan senarai yang diratakan
Selepas meratakan, anda boleh dengan mudah menapis senarai yang dihasilkan menggunakan klausaWhere
group
<code class="language-csharp">IEnumerable<MyNode> filteredNodes = flattenedNodes.Where(node => node.group == 1);</code>kaedah yang dipertingkatkan dan generik
untuk kejelasan kod yang lebih baik dan kebolehgunaan semula:
Kaedah lanjutan
Kaedah lebih baik dilaksanakan sebagai kaedah lanjutan : Ini menjadikan kod lebih mudah dibaca dan intuitif. Flatten
IEnumerable<MyNode>
Untuk kebolehgunaan yang lebih luas, kaedah lanjutan generik boleh dibuat, menerima struktur pokok dan fungsi untuk mengambil keturunan dari nod:
<code class="language-csharp">public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f) { return e.SelectMany(c => f(c).Flatten(f)).Concat(e); }</code>
Aplikasi praktikal
untuk menggunakan kaedah
, hanya panggilnya pada akar pokok anda:
Flatten
<code class="language-csharp">IEnumerable<MyNode> tree = ...; // Your tree structure var flattenedNodes = tree.Flatten();</code>
Atas ialah kandungan terperinci Bagaimana saya boleh meratakan struktur pokok ke dalam senarai satu peringkat menggunakan linq?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!