Суммировать список BigIntegers

Я просмотрел все, но не могу понять этого. Как вы суммируете список 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 ответов


совокупность функция является более общей версией Sum:

var bigInts = new List<System.Numerics.BigInteger>(); 
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.Добавьте с предыдущим результатом (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


вы также можете использовать ForEach () метод в общих списках для добавления:

var bigInts = new List<BigInteger>();

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