遍历一个列表,该列表有另一个列表,另一个列表有另一个列表等

Iterate through a list that has another list that has another list etc

所以我有一个特定的列表 class 我已经定义了 IList<Element> A; 元素 class 有 IList<Children> b;

B 列表从文件中获取数据。 B 可能有一个列表,其中包含一个包含列表等的列表... "Recursively" 或者 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();
    }
}

可能对于非常深的列表来说是个问题——因为堆栈可能变得太大;在这种情况下,使用本地队列或堆栈并使用 that 作为逻辑状态可以避免:

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);
       }
    }
}

您可以根据深度优先或广度优先使用堆栈与队列。