Heim > Backend-Entwicklung > C++ > Wie kann LINQ hierarchische Daten effizient verflachten und nach einem bestimmten Eigenschaftswert filtern?

Wie kann LINQ hierarchische Daten effizient verflachten und nach einem bestimmten Eigenschaftswert filtern?

Susan Sarandon
Freigeben: 2025-01-29 01:01:09
Original
541 Leute haben es durchsucht

How Can LINQ Efficiently Flatten Hierarchical Data and Filter by a Specific Property Value?

LINQ -Daten für flache Ebenen verwenden

In der baumartigen Datenstruktur ist die flache Liste der Knoten häufig von der verschachtelten Ebene erforderlich. Betrachten Sie beispielsweise ein "MyNode" -Objekt mit dem Attribut "Elemente", das eine Sub -Node -Sammlung enthält. Um eine flache Liste mit allen Knoten mit spezifischen Attributwerten zu erhalten, liefert Linq eine elegante Lösung.

Lösung

Um den Baum in einer LINQ -Abfrage zu verflachen und den spezifischen Attributwert zu untersuchen, befolgen Sie bitte die folgenden Schritte:

Folgendes ist eine detaillierte Erklärung:

<code class="language-csharp">// 扁平化树
IEnumerable<mynode> flatTree = e.SelectMany(c => Flatten(c.Elements)).Concat(new[] { e });

// 按属性值筛选扁平化列表
var result = flatTree.Where(n => n.group == 1);</code>
Nach dem Login kopieren

Abflach (C.elemente):

Dieser Teil des Sub -Node jedes Knotens in der ursprünglichen Sammlung von rekursiv.
  • concat (new [] {e}): Dies hängt den aktuellen Knoten an die Liste der flachen Sub -Node an.
  • wobei (n = & gt; n.group == 1):
  • Diese Klausel zeigt flache Liste, die nur Knoten mit "Gruppen" -Werten enthält.
  • erweiterte Methode Version
  • Um die Lesbarkeit von Code zu verbessern, können Sie die flache Funktion in die Erweiterungsmethode umwandeln:

Die generische Version des benutzerdefinierten Baums

Für Bäume, die sich von "MyNode" unterscheiden, können Sie die generische Version der flachen Funktion verwenden.

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

Um den "MyNode" -Baum zu verflachen und den Knoten der "Gruppe" zu entsprechen, der 1: entspricht:

Durch das Verständnis des flachen Konzepts des Baumes und des starken Betriebs von LINQ können Sie Daten aus der komplexen hierarchischen Struktur effizient extrahieren und bedienen.
<code class="language-csharp">public static IEnumerable<T> Flatten<T>(
    this IEnumerable<T> e,
    Func<T, IEnumerable<T>> f
) => e.SelectMany(c => f(c).Flatten(f)).Concat(e);</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann LINQ hierarchische Daten effizient verflachten und nach einem bestimmten Eigenschaftswert filtern?. 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