所以我有一个列表,我定义了一个特定的类,比方说 IList<Element> A;
Element类有 IList<Children> b;
B列表从一个文件中获取数据。B可以有一个列表,包含一个列表,包含一个列表等等。"递归 "或B可以只有一个列表,即B可以有不同的嵌套列表。
我想对所有的列表进行迭代,有什么可行的方法吗?
列表中的 憨厚 方法只是简单的堆栈递归--对于很多常见的场景来说,它是可以的。
class A {
List<B> _theList;
void DoTheThing() {
foreach(var b in _theList) b.DoTheThing();
}
}
class B {
List<B> _innerItems;
void DoTheThing() {
DoTheThingAtThisLevel();
// and now recurse
foreach(var inner in _innerItems) inner.DoTheThing();
}
}
这个 可以 对于非常深的列表来说是个问题--因为堆栈可能会变得太大;在这种情况下,使用本地队列或堆栈并使用 该 的逻辑状态可以避免这种情况。
class A {
List<B> _theList;
void DoTheThing() {
var queue = new Queue<B>();
foreach (var b in _theList)
queue.Enqueue(b);
while (queue.Count != 0)
{
var b = queue.Dequeue();
b.ProcessThisLevelOnly();
// now we do the logical recursion here
foreach (var inner in b.Items)
queue.Enqueue(inner);
}
}
}
你可以使用一个堆栈与队列 根据深度优先或广度优先。