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

如何使用LINQ弄平树结构并通过属性过滤?

Patricia Arquette
发布: 2025-01-29 00:51:14
原创
235 人浏览过

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

使用LINQ扁平化树形结构并按属性过滤

在树形数据结构领域,经常需要将层次结构转换为扁平列表。假设您有一个具有Parent和Elements属性的分层类MyNode,并且您希望通过将所有MyNode实例提取到单个列表中来扁平化树。具体来说,您只对获取group属性等于1的节点感兴趣。

以下LINQ查询为您提供了解决方案:

<code class="language-c#">var flatList = rootNodes.SelectMany(node => Flatten(node.Elements)).Concat(rootNodes).Where(node => node.group == 1);</code>
登录后复制

以下是其工作原理:

  • SelectMany(node => Flatten(node.Elements)): 此方法递归地扁平化每个MyNode的Elements集合,获得所有后代的扁平化列表。
  • Concat(rootNodes): 将后代的扁平化列表与原始MyNodes列表连接起来。
  • Where(node => node.group == 1): 过滤扁平化列表,仅包含group属性为1的节点。

为了提高代码的可读性,请考虑使用扩展方法进行扁平化:

<code class="language-c#">public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f) => e.SelectMany(c => f(c).Flatten(f)).Concat(e);</code>
登录后复制

然后,使用您的树调用扩展方法,并指定如何检索后代:

<code class="language-c#">var flatList = tree.Flatten(node => node.Elements).Where(node => node.group == 1);</code>
登录后复制

享受使用LINQ扁平化层次数据带来的好处!

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

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