Maison > développement back-end > C++ > Comment puis-je aplatir une structure d'arbre et filtrer par une propriété utilisant LINQ?

Comment puis-je aplatir une structure d'arbre et filtrer par une propriété utilisant LINQ?

Patricia Arquette
Libérer: 2025-01-29 00:51:14
original
235 Les gens l'ont consulté

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

Utilisez la structure et filtrez de l'arborescence en forme de plats linq selon l'attribut

Dans le domaine des données en forme d'arbre, il est souvent nécessaire de convertir la structure hiérarchique en une liste plate. Supposons que vous ayez un mode de classe en couches avec les attributs parent et éléments, et que vous souhaitez aplatir les arbres en extraitant toutes les instances MyNode dans une seule liste. Plus précisément, vous êtes uniquement intéressé à obtenir des nœuds égaux à 1 dans le groupe.

La requête LINQ suivante vous fournit une solution:

<code class="language-c#">var flatList = rootNodes.SelectMany(node => Flatten(node.Elements)).Concat(rootNodes).Where(node => node.group == 1);</code>
Copier après la connexion
Ce qui suit est son principe de travail:

    selectMany (node ​​= & gt; aplaten (node.elements))
  • : Cette méthode a aplati de manière récursive la collection d'éléments de chaque mynode pour obtenir la liste plate de toutes les descendants. Concat (RootNodes)
  • : Connectez la liste plate de la progéniture à la liste des MyNodes originale.
  • où (node ​​= & gt; node.group == 1) : filtrez la liste plate, qui ne contient que des nœuds avec un attribut de groupe 1.
  • Afin d'améliorer la lisibilité du code, veuillez envisager d'utiliser la méthode d'extension pour l'aplatissement:
Utilisez ensuite votre méthode d'extension des appels d'arbre et spécifiez comment récupérer la progéniture:

<code class="language-c#">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>
Copier après la connexion
Profitez des avantages apportés par l'utilisation de données à niveau plat LINQ!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal