无需递归即可处理嵌套的项目列表

axe*_*l g 3 c# iteration recursion

我有一个类Item,如下所示:

public class Item
{
   public string Name { get; set; }
   public int Value { get; set; }
   public List<Item> SubItems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

项目可以嵌套 n 层,这意味着任何项目都可以包含一个项目列表,其中每个项目都包含一个项目列表...

我想编写一个方法,它接受 的实例作为参数并返回所有嵌套项的item总和。value

我当前的递归方法如下所示:

public int GetSumOfValue(Item item)
{
   int sum = item.Value;
   if (item.SubItems == null)
   {
      return sum;
   }

   foreach (var subItem in item.SubItems)
   {
      sum += GetSumOfValue(subItem);
   }
   return sum;
}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我读到在大多数情况下使用循环的迭代方法会更快。

(请注意,为了简洁起见,我抽象并缩短了该方法。这不是生产代码。)

由于存在嵌套类,我很难弄清楚如何将递归方法转变为迭代方法。

任何提示表示赞赏。谢谢。

Tim*_*ter 7

您可以使用 aQueue<Item>来收集所有项目:

public static int GetSumOfValue(Item item)
{
    if(item == null) 
    {
        throw new ArgumentNullException(nameof(item), "item must not be null");
    }

    int totalSum = 0;
    Queue<Item> queue = new Queue<Item>();
    queue.Enqueue(item);

    while (queue.Count > 0)
    {
        Item current = queue.Dequeue();
        totalSum += current.Value;
        foreach (Item subItem in current?.SubItems ?? Enumerable.Empty<Item>())
        {
            queue.Enqueue(subItem);
        }
    }

    return totalSum;
}
Run Code Online (Sandbox Code Playgroud)