迭代一个列表,有另一个列表,有另一个列表等。

问题描述 投票:1回答:1

所以我有一个列表,我定义了一个特定的类,比方说 IList<Element> A;Element类有 IList<Children> b;

B列表从一个文件中获取数据。B可以有一个列表,包含一个列表,包含一个列表等等。"递归 "或B可以只有一个列表,即B可以有不同的嵌套列表。

我想对所有的列表进行迭代,有什么可行的方法吗?

c# .net-framework-version
1个回答
1
投票

列表中的 憨厚 方法只是简单的堆栈递归--对于很多常见的场景来说,它是可以的。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.