求和BigIntegers列表

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

Using System.Numerics; Using System.Linq; List bigInts = new List(); BigInteger sum = bigInts.Sum(); // doesn't work BigInteger sum = bigInts.Sum(); // doesn't work BigInteger sum = bigInts.Sum(x => x); // doesn't work 

你必须这样做吗?

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

聚合函数是Sum的更通用版本:

 var bigInts = new List(); bigInts.Add(new System.Numerics.BigInteger(1)); var result = bigInts.Aggregate((currentSum, item)=> currentSum + item)); 
 var sum = bigInts.Aggregate(BigInteger.Add); 

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

正如阿列克谢所说的那样,Aggregate总和更为一般。 下面介绍的是一种扩展方法。

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

我没有测试过这个,我的C#可能会变得有点生疏了。 但这个想法应该是健全的:见http://msdn.microsoft.com/en-us/library/bb549218.aspx#Y0

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

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