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
Patricia ArquetteOriginal
2025-01-29 01:06:10208Durchsuche

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>

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>

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>

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>

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!

Stellungnahme:
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