开发者

Accumulating sum in one line in C#

Is it possible to do this in one line with the goal of getting the accumulated sum equal to n?

int n = 0;
for (int i = 1; i <= 10; i++)
{开发者_Python百科
    n += i;
}


There's a LINQ extension method for that:

static int SlowSum1ToN(int N)
{
    return Enumerable.Range(1, N).Sum();
}

However, you can also calculate this particular value (the sum of an arithmetic sequence) without iterating at all:

static int FastSum1ToN(int N)
{
    return (N * (1 + N)) / 2;
}


Yes it's possible, you can do that using Enumerable.Range to generate a sequence of integer numbers and then call the LINQ extension method Sum as the following:

int result = Enumerable.Range(1, 10).Sum();


Yes

You can replace

int S = 0

for (int i = 0; i <= N; i++)
{
    S += i;
}

with

int S = (N*(N+1))/2


As an added answer, there is also the Aggregate function which is more general than Sum:

var sum = Enumerable.Range(1, 10).Aggregate(0, (a, b) => a += b);

So you can also do stuff like

// multiply 1 * 2 * 3 * 4 ...
var product = Enumerable.Range(1, 10).Aggregate(1, (a, b) => a *= b);


What's the fascination with one liners? Here it is:

int n = 0; for (int i = 1; i <= 10; i++) {n += i;}

Is there a better way to calculate this? Sure. See the other answers that use a formula.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜