Heim >Backend-Entwicklung >C++ >Wie kann LINQ eine Baumstruktur und einen Filter durch eine bestimmte Eigenschaft filtern?

Wie kann LINQ eine Baumstruktur und einen Filter durch eine bestimmte Eigenschaft filtern?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-29 00:56:12770Durchsuche

How Can LINQ Flatten a Tree Structure and Filter by a Specific Property?

Verwenden Sie LINQ, um die flache Baumstruktur

anzuzeigen In der Softwareentwicklung sind häufig Daten erforderlich, die Gewebe in eine baumähnliche Struktur sind. Eine häufige Aufgabe besteht darin, Bäume in flache Listen oder Sets umzuwandeln. Dies kann mit einem LINQ -Framework (Language Integration Query) im .NET implementiert werden.

unter der Annahme, dass wir die folgende einfache Baumstruktur haben, die von der MyNode -Klasse ausgedrückt wird:

Wir erhalten eine IEnumeration
<code class="language-csharp">class MyNode
{
    public MyNode Parent;
    public IEnumerable<MyNode> Elements;
    public int Group { get; set; }
}</code>
und möchten die Liste aller Knoten (einschließlich interner Knoten) als einzelne flache Liste in den Baum erhalten. Darüber hinaus hoffen wir, diese Liste zu filtern, nur der Knoten mit einem Gruppenattribut von 1.

Um die Baumstruktur anzuzeigen, können wir das Selectmany Computing von Linq verwenden, um alle Nachkommen jedes Knotens abzurufen. Die folgende Abflacherweiterungsmethode wird erhalten und die Eingabeelemente sind verfügbar und ihre Elemente Attribute werden rekursiv abgeflacht:

Um der Liste der LEFLATION der Gruppe zu folgen, können wir den Where -Operator verwenden:
<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> elements) =>
    elements.SelectMany(c => Flatten(c.Elements)).Concat(elements);</code>

Diese Lösung ist effektiv und elegant abgeflacht, und die unerwünschten Knoten werden gemäß den Gruppenattributen herausgefiltert.
<code class="language-csharp">var flattenedList = treeElements.Flatten().Where(node => node.Group == 1);</code>

Das obige ist der detaillierte Inhalt vonWie kann LINQ eine Baumstruktur und einen Filter durch eine bestimmte Eigenschaft filtern?. 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