在将唯一元素的sequentce传递给此函数之前,一切都运行得很好。最简单的复制方法是:
var sumOfSquares = Enumerable.Range(5, 1).Aggregate((s, i) => s + i*i);
// sumOfSquares == 5我认为当序列只包含一个元素时,这个版本的Aggregate应该抛出一个异常。是我说对了还是我漏掉了一些细节?
发布于 2010-12-17 03:03:26
还有另一个重载,你可以提供一个合适的种子,并获得我认为是你想要的结果。
var sumOfSquares = Enumerable.Range(5, 1).Aggregate(0, (s, i) => s + i * i);在这段代码中,0是初始种子,s是累加值,i是当前项。这会产生值25。(5, 2)生产61个,(5, 3)生产110个,等等。
发布于 2010-12-17 02:56:12
这应该不会失败。根据documentation的说法
源的第一个元素用作初始聚合值。
因此,在这种情况下,您只需要返回第一个元素(5),并且不执行聚合。没有错误。
正如Anthony Pegram所指出的,在another overload中,您可以指定聚合的种子值。将种子设置为0会得到答案25,这可能就是您想要的结果。
var sumOfSquares = Enumerable.Range(5, 1).Aggregate(0, (s, i) => s + i * i);当然,这里你不应该使用Aggregate -你可以使用Sum。
var sumOfSquares = Enumerable.Range(5, 1).Sum(i => i * i);我想这只是一个简单的例子。
发布于 2010-12-17 03:01:21
为什么要这么做呢?取一个数字的和是完全有效的。
此外,为了让调用者避免异常,他需要这样做:
public double MySum(IEnumerable<double> seq) {
switch (seq.Count()) {
case 0: return 0.0;
case 1: return seq.First();
default: return seq.Aggregate((s, i) => s + i);
}
}一大堆调用,这也需要通过序列两次(或至少前两个元素)。
https://stackoverflow.com/questions/4464341
复制相似问题