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)
虽然这有效,但我读到在大多数情况下使用循环的迭代方法会更快。
(请注意,为了简洁起见,我抽象并缩短了该方法。这不是生产代码。)
由于存在嵌套类,我很难弄清楚如何将递归方法转变为迭代方法。
任何提示表示赞赏。谢谢。
您可以使用 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)
归档时间: |
|
查看次数: |
266 次 |
最近记录: |