首页 > 后端开发 > C++ > LINQ如何通过特定属性弄平树结构并过滤?

LINQ如何通过特定属性弄平树结构并过滤?

Mary-Kate Olsen
发布: 2025-01-29 00:56:12
原创
767 人浏览过

How Can LINQ Flatten a Tree Structure and Filter by a Specific Property?

使用LINQ展平树状结构

在软件开发中,经常需要处理组织成树状结构的数据。一个常见的任务是将树转换为扁平列表或集合。这可以使用.NET中的语言集成查询 (LINQ) 框架来实现。

假设我们有以下由MyNode类表示的简单树状结构:

<code class="language-csharp">class MyNode
{
    public MyNode Parent;
    public IEnumerable<MyNode> Elements;
    public int Group { get; set; }
}</code>
登录后复制

我们得到一个IEnumerable,并希望获得树中所有节点(包括内部节点)的列表作为一个单一的扁平列表。此外,我们希望过滤此列表,只包含Group属性等于1的节点。

为了展平树状结构,我们可以利用LINQ的SelectMany运算符递归地检索每个节点的所有后代。下面的Flatten扩展方法获取输入元素并递归地展平它们的Elements属性:

<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> elements) =>
    elements.SelectMany(c => Flatten(c.Elements)).Concat(elements);</code>
登录后复制

为了按Group过滤展平的列表,我们可以使用Where运算符:

<code class="language-csharp">var flattenedList = treeElements.Flatten().Where(node => node.Group == 1);</code>
登录后复制

此解决方案有效且优雅地展平了树状结构,同时根据Group属性过滤掉不需要的节点。

以上是LINQ如何通过特定属性弄平树结构并过滤?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板