使用LINQ展平树状结构
在软件开发中,经常需要处理组织成树状结构的数据。一个常见的任务是将树转换为扁平列表或集合。这可以使用.NET中的语言集成查询 (LINQ) 框架来实现。
假设我们有以下由MyNode类表示的简单树状结构:
<code class="language-csharp">class MyNode { public MyNode Parent; public IEnumerable<MyNode> Elements; public int Group { get; set; } }</code>
我们得到一个IEnumerable
为了展平树状结构,我们可以利用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中文网其他相关文章!