>使用linq将树结构弄平到单个列表
>这是一种基于LINQ的方法:
此递归功能有效地扁平了树。 它可以通过为每个节点选择所有子元素(
),递归地将这些孩子弄平,然后将扁平儿童与原始节点相连。<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> e) { return e.SelectMany(c => c.Elements.Flatten()).Concat(e); }</code>
>过滤扁平的列表c.Elements
平坦后,您可以使用Linq的子句轻松过滤结果列表。例如,选择具有属性值为1的节点:
Where
增强和通用方法group
<code class="language-csharp">IEnumerable<MyNode> filteredNodes = flattenedNodes.Where(node => node.group == 1);</code>
扩展方法:
>通用方法:Flatten
对于更广泛的适用性,可以创建一个通用扩展方法,接受树结构和一个功能,以从节点中检索后代:IEnumerable<MyNode>
> 实用应用
<code class="language-csharp">public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f) { return e.SelectMany(c => f(c).Flatten(f)).Concat(e); }</code>
这种简洁的方法利用Linq的功率有效地管理和处理复杂的分层数据,为树木变平和随后的过滤提供了干净可维护的解决方案。
以上是如何使用LINQ将树结构弄平到单层列表?的详细内容。更多信息请关注PHP中文网其他相关文章!