【发布时间】:2018-09-28 16:10:08
【问题描述】:
我有这门课:
public class Node
{
public string Name {get; set;}
public Node Left {get; set;}
public Node Right{get; set;}
}
现在我有一棵树,每个节点都有一个左右节点,每个节点都有左右节点等等。
我想获取树中所有节点的Names,但使用 SelectMany 无法做到。
我可以通过多种方式做到这一点,比如使用递归函数,但我真的很想知道它是如何使用 Linq 完成的。
tree.SelectMany(x=> new List<Node> {x.Left, x.Right});
上面的代码只返回2个节点(父节点的左右节点)。
【问题讨论】:
-
没有内置的递归 LINQ 方法。所以最好的办法是你自己实现一个递归方法并调用它。
-
@TimSchmelter 我确实做到了,并得到了我想要的,但我想知道是否有一种我不知道的方法可以用 Linq 做到这一点,而不是调用另一种方法。
-
您可以在 Stackoverflow 上找到 LINQ 方法。但它们非常复杂,而且通常效率低下。递归和LINQ不能很好地配合使用,所以我的建议是使用你的方法。
-
@TimSchmelter 非常感谢您的评论。正如我所说的那样,我已经这样做了,我在想有一种我想念的简单方法,我只是为了学习目的而不是为了项目而问这个问题。到目前为止,我已经选择了一个好的方法。