总结一下BigIntegers的列表

时间:2012-04-21 04:57:03

标签: c# syntax sum biginteger

我看了一遍,但无法弄清楚这一点。你如何总结BigIntegers列表?

Using System.Numerics;
Using System.Linq;

List<BigInteger> bigInts = new List<BigInteger>();
BigInteger sum = bigInts.Sum();             // doesn't work
BigInteger sum = bigInts.Sum<BigInteger>(); // doesn't work
BigInteger sum = bigInts.Sum(x => x);       // doesn't work

你必须这样做吗?

BigInteger sum = new BigInteger(0);
foreach(BigInteger bigint in bigInts)
    sum += bigint;

4 个答案:

答案 0 :(得分:15)

var sum = bigInts.Aggregate(BigInteger.Add);

Aggregate获取一个方法的委托,该方法获取两个BigIntegers并返回一个BigInteger。它使用默认的BigInteger作为初始值(0),并遍历每个BigInteger,使用前一个结果调用BigInteger.Add(0将是第一次的前一个结果 - 也称为'seed')和当前元素。

答案 1 :(得分:11)

Aggregate函数是Sum的更通用版本:

var bigInts = new List<System.Numerics.BigInteger>(); 
bigInts.Add(new System.Numerics.BigInteger(1));

var result = bigInts.Aggregate((currentSum, item)=> currentSum + item));

答案 2 :(得分:1)

您还可以使用通用列表上的ForEach()方法进行添加:

var bigInts = new List<BigInteger>();

BigInteger sum = 0;
bigInts.ForEach(x => sum += x);

答案 3 :(得分:0)

正如阿列克谢所说,总和来自总和。 下面介绍的是一种扩展方法。

public BigInteger static Sum(IEnumerable<BigInteger> this lst)
{
    return lst.Aggregate(BigInteger.Zero, (acc, next)=> acc.Add(next));
}

我还没有对此进行测试,而我的C#可能会变得有点生疏。 但这个想法应该是合理的: 见http://msdn.microsoft.com/en-us/library/bb549218.aspx#Y0