这个问题是在面试时提出的。我需要总计(仅使用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}。
有没有任何整洁的工作可以解决它?
答案 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); });
使用开始使用种子值聚合的聚合版本,而不是开始与第一对聚合。