Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk meratakan struktur pokok hierarki ke dalam senarai rata menggunakan Linq?

Bagaimana untuk meratakan struktur pokok hierarki ke dalam senarai rata menggunakan Linq?

Linda Hamilton
Linda Hamiltonasal
2025-01-29 00:46:10337semak imbas

How to Flatten a Hierarchical Tree Structure into a Flat List Using LINQ?

Struktur paparan rata linq

Anggapkan bahawa terdapat struktur data pokok berlapis yang diwakili oleh kelas

, masing -masing mempunyai nod induk, koleksi sub -node, dan sekumpulan pengenalpastian

MyNode cabaran

Matlamatnya adalah untuk mendapatkan senarai semua objek , termasuk nod induk dan sub -nodes, sebagai satu senarai rata. Walau bagaimanapun, hanya nod harus dimasukkan ke dalam senarai hasil.

penyelesaian MyNode group == 1

Untuk mencapai kepelbagaian ini, ungkapan Linq berikut boleh digunakan:

Ekspresi ini adalah rekursif di seluruh struktur pokok, dan pameran itu diratakan sebagai satu senarai. Ia memilih semua sub -node nod yang diberikan dan panggilan

untuk menghasilkan rekursif. Kemudian sambungkan urutan ini ke nod semasa untuk menghasilkan jadual penggabungan.

penapis
<code class="language-csharp">IEnumerable<MyNode> Flatten(IEnumerable<MyNode> e) =>
    e.SelectMany(c => Flatten(c.Elements)).Concat(e);</code>

Flatten Apabila pokok itu diratakan, anda boleh menggunakan senarai penapis kaedah

, dan hanya pilih nod

.

Peningkatan gaya tambahan

Where(...) group == 1 Untuk meningkatkan kebolehbacaan,

kaedah boleh ditakrifkan sebagai fungsi lanjutan dalam kelas statik:
<code class="language-csharp">var result = flattenedNodes.Where(n => n.group == 1);</code>

pelaksanaan yang dijumpai

Untuk umumnya proses rata, ia boleh membuat kaedah pengembangan generik. Flatten

Kaedah ini membolehkan pameran untuk meratakan sebarang struktur data berlapis, dengan syarat fungsi ditakrifkan untuk mengambil nod keturunan dari setiap elemen.
<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> e) =>
    e.SelectMany(c => c.Elements.Flatten()).Concat(e);</code>
3

Atas ialah kandungan terperinci Bagaimana untuk meratakan struktur pokok hierarki ke dalam senarai rata menggunakan Linq?. 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