Суммировать список 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);