Rumah > pembangunan bahagian belakang > C++ > Bagaimana saya boleh meratakan struktur pokok ke dalam senarai satu peringkat menggunakan linq?

Bagaimana saya boleh meratakan struktur pokok ke dalam senarai satu peringkat menggunakan linq?

Patricia Arquette
Lepaskan: 2025-01-29 01:06:10
asal
179 orang telah melayarinya

How Can I Flatten a Tree Structure into a Single-Level List Using 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>
Salin selepas log masuk
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 klausa 1: Where group
<code class="language-csharp">IEnumerable<MyNode> filteredNodes = flattenedNodes.Where(node => node.group == 1);</code>
Salin selepas log masuk
kaedah yang dipertingkatkan dan generik

untuk kejelasan kod yang lebih baik dan kebolehgunaan semula:

Kaedah lanjutan
  • Kaedah:

    Kaedah lebih baik dilaksanakan sebagai kaedah lanjutan : Ini menjadikan kod lebih mudah dibaca dan intuitif. Flatten IEnumerable<MyNode>

  • Kaedah Generik:

    Untuk kebolehgunaan yang lebih luas, kaedah lanjutan generik boleh dibuat, menerima struktur pokok dan fungsi untuk mengambil keturunan dari nod:

Versi generik ini membolehkan meratakan struktur seperti pokok.
<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>
Salin selepas log masuk

Aplikasi praktikal

untuk menggunakan kaedah

, hanya panggilnya pada akar pokok anda:

Flatten

Pendekatan ringkas ini memanfaatkan kuasa Linq untuk mengurus dan memproses data hierarki yang kompleks, menawarkan penyelesaian yang bersih dan dikekalkan untuk meratakan pokok dan penapisan berikutnya.
<code class="language-csharp">IEnumerable<MyNode> tree = ...; // Your tree structure
var flattenedNodes = tree.Flatten();</code>
Salin selepas log masuk

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!

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