Maison > développement back-end > C++ > Comment LINQ peut-il aplatir une structure d'arbres et filtrer par une propriété spécifique?

Comment LINQ peut-il aplatir une structure d'arbres et filtrer par une propriété spécifique?

Mary-Kate Olsen
Libérer: 2025-01-29 00:56:12
original
767 Les gens l'ont consulté

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

Utilisez LINQ pour montrer la structure arborescente plate

Dans le développement de logiciels, les données tissulaires dans une structure en forme d'arbre sont souvent nécessaires. Une tâche commune consiste à convertir les arbres en listes ou ensembles plates. Cela peut être implémenté à l'aide d'un cadre de requête de linguisme (LINQ) dans le .NET.

En supposant que nous avons la structure d'arbre simple suivante exprimée par la classe MyNode:

Nous obtenons un ienumeration
<code class="language-csharp">class MyNode
{
    public MyNode Parent;
    public IEnumerable<MyNode> Elements;
    public int Group { get; set; }
}</code>
Copier après la connexion
et voulons obtenir la liste de tous les nœuds (y compris les nœuds internes) dans l'arbre en une seule liste plate. De plus, nous espérons filtrer cette liste, uniquement le nœud avec un attribut de groupe égal à 1.

Afin de montrer la structure semblable à l'arborescence, nous pouvons utiliser le calcul SelectMany de Linq pour récupérer toutes les progénières de chaque nœud. La méthode d'extension d'aplatie suivante est obtenue et les éléments d'entrée sont disponibles et leurs attributs d'éléments sont aplatis récursivement:

Afin de suivre la liste de laflation du groupe, nous pouvons utiliser l'opérateur où:
<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> elements) =>
    elements.SelectMany(c => Flatten(c.Elements)).Concat(elements);</code>
Copier après la connexion

Cette solution est efficace et élégamment aplatie, et les nœuds indésirables sont filtrés selon les attributs du groupe.
<code class="language-csharp">var flattenedList = treeElements.Flatten().Where(node => node.Group == 1);</code>
Copier après la connexion

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