Maison >développement back-end >C++ >Comment LINQ peut-il aplatir une structure d'arbres et filtrer par une propriété spécifique?
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>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 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>
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>
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!