Heim > Backend-Entwicklung > C++ > Wie kann ich eine Baumstruktur mit LINQ in eine einstufige Liste überflachen?

Wie kann ich eine Baumstruktur mit LINQ in eine einstufige Liste überflachen?

Patricia Arquette
Freigeben: 2025-01-29 01:06:10
Original
179 Leute haben es durchsucht

How Can I Flatten a Tree Structure into a Single-Level List Using LINQ?

Verwenden Sie LINQ zum Abflachen von Baumstrukturen in eine einzelne Liste

linq bietet eine elegante Lösung zum Abflachen von baumartigen Strukturen-Datenstrukturen, bei denen Knoten untergeordnete Elemente enthalten-eine einstufige Liste. Dies vereinfacht die Iteration über alle Knoten, unabhängig von ihrer hierarchischen Tiefe.

Der Abflachungsprozess

Hier ist eine LINQ-basierte Methode, um dies zu erreichen:

<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> e)
{
    return e.SelectMany(c => c.Elements.Flatten()).Concat(e);
}</code>
Nach dem Login kopieren

Diese rekursive Funktion flacht den Baum effizient. Es funktioniert, indem alle untergeordneten Elemente (c.Elements) für jeden Knoten ausgewählt, diese Kinder rekursiv abgeflacht und dann die abgeflachten Kinder mit dem ursprünglichen Knoten verkettet werden.

Filterung der abgeflachten Liste

Nach der Abflachung können Sie die resultierende Liste einfach mit der Where -Klausel von Linq filtern. Zum Beispiel, um Knoten mit einem group Eigenschaftswert von 1:

auszuwählen
<code class="language-csharp">IEnumerable<MyNode> filteredNodes = flattenedNodes.Where(node => node.group == 1);</code>
Nach dem Login kopieren

Verbesserte und generische Methoden

für eine verbesserte Code -Klarheit und -Wiederverwendbarkeit:

  • Erweiterungsmethode: Die Flatten -Methode wird am besten als Erweiterungsmethode von IEnumerable<MyNode> implementiert: Dies macht den Code lesbarer und intuitiver.

  • Generische Methode: Für eine breitere Anwendbarkeit kann eine generische Erweiterungsmethode erstellt werden, die eine Baumstruktur akzeptiert und eine Funktion zum Abrufen von Nachkommen aus einem Knoten:

<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>
Nach dem Login kopieren

Diese generische Version ermöglicht eine Abflachung einer baumartigen Struktur.

Praktische Anwendung

Um die Methode Flatten zu verwenden, rufen Sie sie einfach auf der Wurzel Ihres Baumes an:

<code class="language-csharp">IEnumerable<MyNode> tree = ...; // Your tree structure
var flattenedNodes = tree.Flatten();</code>
Nach dem Login kopieren

Dieser prägnante Ansatz nutzt die LINQ -Leistung, um komplexe hierarchische Daten effizient zu verwalten und zu verarbeiten, und bietet eine saubere und wartbare Lösung für die Abflachung und die anschließende Filterung von Baum.

.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Baumstruktur mit LINQ in eine einstufige Liste überflachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage