Maison >développement back-end >C++ >Comment LINQ peut-elle aplatir efficacement les données hiérarchiques et filtrer par une valeur de propriété spécifique?

Comment LINQ peut-elle aplatir efficacement les données hiérarchiques et filtrer par une valeur de propriété spécifique?

Susan Sarandon
Susan Sarandonoriginal
2025-01-29 01:01:09545parcourir

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

Utilisez des données de niveau plat Linq

Dans la structure des données semblables à l'arbre, la liste plate des nœuds est souvent requise à partir du niveau imbriqué. Par exemple, considérons un objet "MyNode" avec l'attribut "Elements", qui contient une collection de sous-nœuds. Afin d'obtenir une liste plate avec tous les nœuds avec des valeurs d'attribut spécifiques, LINQ fournit une solution élégante.

Solution

Pour aplatir l'arbre dans une requête LINQ et dépister la valeur d'attribut spécifique, veuillez suivre les étapes ci-dessous:

Ce qui suit est une explication détaillée:

<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>

aplatir (C.Elements):

Cette partie du sous-nœud de chaque nœud dans la collection originale de récursivement.
  • Concat (new [] {e}): Ceci attache le nœud actuel à la liste de sous-nœuds plate.
  • où (n = & gt; n.group == 1):
  • Cette clause écrse la liste plate, qui ne comprend que des nœuds avec des valeurs "groupe".
  • version de méthode étendue
  • Afin d'améliorer la lisibilité du code, vous pouvez convertir la fonction plate en méthode d'expansion:

La version générique de l'arbre personnalisé

Pour les arbres différents de "MyNode", vous pouvez utiliser la version générique de la fonction plate.

Exemple d'utilisation
<code class="language-csharp">public static IEnumerable<mynode> Flatten(this IEnumerable<mynode> e) =>
    e.SelectMany(c => c.Elements.Flatten()).Concat(e);</code>

pour aplatir l'arbre "mynode" et dépister le nœud du "groupe" égal à 1:

En comprenant le concept plat de l'arbre et le fonctionnement solide de LINQ, vous pouvez extraire et utiliser efficacement les données de la structure hiérarchique complexe.

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!

Déclaration:
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