我有一个递归数据结构,例如链表:
class Node
{
private Node next;
private int data;
// (...)
public Node Next
{
get
{
return next;
}
}
public int Data
{
get
{
return data;
}
}
}
我想进行一个LINQ查询,它从列表的开头开始,然后遍历所有元素,即时收集数据。怎么做?
仅通过简单的LINQ查询就很难遍历任意复杂的数据结构。在某些时候,您必须“减少损失”并自己编写迭代器块-可能仅适用于标准LINQ难以表达的部分。
也就是说,对于您的链表示例,使用moreLinq,您可以执行以下操作:
MoreEnumerable.Generate(head, node => node.Next)
.TakeWhile(node => node != null)
如果要递归LINQ树遍历(或类似的遍历),那会大不相同,但是这里有一个示例(深度优先):
private static IEnumerable<Node> GetNodeAndDescendants(Node node)
{
return new[] { node }.Concat(node.Children.SelectMany(GetNodeAndDescendants));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句