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