gpt4 book ai didi

c# - 处理嵌套的项目列表而不递归

转载 作者:行者123 更新时间:2023-12-05 01:03:42 25 4
gpt4 key购买 nike

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

public class Item
{
public string Name { get; set; }
public int Value { get; set; }
public List<Item> SubItems { get; set; }
}

项目可以嵌套在 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;
}

虽然这可行,但我了解到在大多数情况下,使用循环的迭代方法会更快。

(请注意,为了简洁起见,我对这个方法进行了抽象和缩短。这不是生产代码。)

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

感谢任何提示。谢谢。

最佳答案

您可以使用 Queue<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;
}

关于c# - 处理嵌套的项目列表而不递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73789153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com