总结BigIntegers列表(Sum a list of BigIntegers)

2019-07-29 02:21发布

我看了遍,但不能想出解决办法。 你如何总结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;

Answer 1:

聚合函数总和的更一般的版本:

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

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


Answer 2:

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

聚合得到的委托,向四周两个BigInteger,并返回一个BigInteger的方法。 它使用一个默认的BigInteger作为初始值(0),并且将详细说明每BigInteger,以调用BigInteger.Add与前一结果(0将是先前结果在第一时间 - 也被称为“种子”)和当前元素。



Answer 3:

您也可以使用forEach()这样的泛型列表的方法做加法:

var bigInts = new List<BigInteger>();

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


Answer 4:

正如阿列克谢说骨料是总和的比较一般。 下面介绍的是一个扩展方法。

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



文章来源: Sum a list of BigIntegers