C# - 使用Aggregate()运行总计

时间:2009-12-03 09:11:06

标签: c# extension-methods

这个问题是在面试时提出的。我需要总计(仅使用Aggregate()

来自数组

(即)

int[] array={10,20,30};

Expected output

10
30
60

当我使用Aggregate(我应用了一些最差的逻辑

array.Aggregate((a, b) => { Console.WriteLine(a + b); return (a + b); });

1)It prints 30,60,对我来说没有使用return(a + b)。

2)为了打印10,我必须通过添加元素零来修改数组    (即){0,10,20,30}。

有没有任何整洁的工作可以解决它?

5 个答案:

答案 0 :(得分:5)

尝试array.Aggregate(0, (a, b) => { Console.WriteLine(a + b); return (a + b); });代替: - )

答案 1 :(得分:2)

Aggregate还有其他重载方式略有不同 - 请看一下这个:http://msdn.microsoft.com/en-us/library/bb549218.aspx

public static TAccumulate Aggregate<TSource, TAccumulate>(
    this IEnumerable<TSource> source,
    TAccumulate seed,
    Func<TAccumulate, TSource, TAccumulate> func )

答案 2 :(得分:1)

您应将种子值指定为0:

int[] array = { 10, 20, 30 };
array.Aggregate(0, (a, b) => { Console.WriteLine(a + b); return a + b; });

这将输出您的期望。

答案 3 :(得分:1)

array.Aggregate(0, (a, b) => 
{ 
    Console.WriteLine(a + b); 
    return a + b;
});

答案 4 :(得分:1)

array.Aggregate(0, (progress, next) => { Console.WriteLine(progress + next); return (progress + next); });

使用开始使用种子值聚合的聚合版本,而不是开始与第一对聚合。