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