【发布时间】:2012-08-27 22:37:44
【问题描述】:
我有一个对象层次结构(MasterNode -> ChildNodes),其中主节点和子节点属于同一类型,并且只有两个级别(顶级和子级)像这样('A' 是 D、E 的父级和F,'B' 是 G 的父级,等等)
A--+
| D
| E
| F
|
B--+
| G
|
C--+
H
I
假设我有一个 MasterNodes 作为父对象(A、B、C)的 IEnumerable,并且给定一个父对象 X,我可以获得其子对象的 IEnumerable X.children
我知道我可以使用 SelectMany 方法或使用
枚举所有叶(子节点)from parent in Masternodes
from child in parent.children
select child
这会给我这个序列:
[D,E,F,G,H,I]
,但这不是我要的。
什么是获取 MasterNodes 集合中对象的深度优先序列的 LINQ 查询?(返回第一个父级,然后是其所有子级,然后是下一个父级,然后是其所有子级等)
预期的结果应该是这样的序列:
[A,D,E,F,B,G,C,H,I]
更新:
我要求纯 .NET 就绪的 LINQ。我知道我可以定义自己的方法来做事,但我想要一些仅基于框架提供的方法的东西。
【问题讨论】:
-
LINQ 可以帮助编写易于理解的代码,但它不包含 EnumerateDepthFirstTwoLevelDeep 方法。您需要组合几个 LINQ 方法来获得所需的结果。如果存在这样的方法,那么找到它要比一次编写几行代码花费更长的时间,因为 LINQ 设计人员需要提供数百甚至数千种附加方法来匹配您的特定情况以及许多不同的方法。
-
这就是我所要求的。针对这个特定案例的这两行 :) Heinzi 的回答正是我想要的
标签: c# linq hierarchy depth-first-search flatten