Supposons qu'il existe une structure de données d'arbres en couches représentée par la classe
, chacune ayant un nœud parent, une collecte de sous-nœuds et un groupe d'identifiant.
MyNode
Challenge
L'objectif est d'obtenir une liste de tous les objets , y compris les nœuds parents et les sous-codes, en tant que liste plate unique. Cependant, seuls les nœuds doivent être inclus dans la liste des résultats.
Solution MyNode
group == 1
Cette expression est récursive tout au long de la structure des arbres, et l'exposition est aplatie en une seule liste. Il sélectionne tous les sous-codes du nœud et appelle
donnés pour générer de manière récursive. Connectez ensuite cette séquence au nœud actuel pour générer la table de fusion.Filtre
IEnumerable<MyNode> Flatten(IEnumerable<MyNode> e) => e.SelectMany(c => Flatten(c.Elements)).Concat(e);
Flatten
Une fois l'arborescence aplatie, vous pouvez utiliser la liste des filtres de méthode
.
<加> L'amélioration du style supplémentaire Where(...)
group == 1
Afin d'améliorer la lisibilité, la méthode
var result = flattenedNodes.Where(n => n.group == 1);
<泛> a trouvé l'implémentation
Afin de généraliser le processus plat, il peut créer une méthode d'extension générique.
Flatten
public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> e) => e.SelectMany(c => c.Elements.Flatten()).Concat(e);
pour implémenter ce type générique, appelez simplement la méthode et fournissez les fonctions correspondantes pour extraire la progéniture:
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!