我用这个类创建了一棵树.
class Node
{
public string Key { get; }
public List<Node> Children { get; }
}
我要在所有子元素及其所有子元素中搜索,以获得符合条件的:
node.Key == SomeSpecialKey
我如何实现它?
我用这个类创建了一棵树.
class Node
{
public string Key { get; }
public List<Node> Children { get; }
}
我要在所有子元素及其所有子元素中搜索,以获得符合条件的:
node.Key == SomeSpecialKey
我如何实现它?
这是一种误解,认为这需要递归.它需要一个堆栈或队列,最简单的方法是使用递归实现它.为了完整起见,我将提供一个非递归的答案.
static IEnumerable<Node> Descendants(this Node root)
{
var nodes = new Stack<Node>(new[] {root});
while (nodes.Any())
{
Node node = nodes.Pop();
yield return node;
foreach (var n in node.Children) nodes.Push(n);
}
}
例如,使用以下表达式:
root.Descendants().Where(node => node.Key == SomeSpecialKey)