Подтвердить что ты не робот

Суммируйте список 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;
4b9b3361

Ответ 1

Функция 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

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

Агрегат получает делегат метода, который получает два BigIntegers и возвращает BigInteger. Он использует по умолчанию BigInteger как начальное значение (0) и перебирает каждый BigInteger, вызывая BigInteger.Add с предыдущим результатом (0 будет первым результатом в первый раз, также называемым "семя" ) и текущим элементом.

Ответ 3

Как сказал Алексей, агрегирование является более общим из суммы. Ниже представлен метод расширения.

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

Я не тестировал это, и мой С# мог бы получить немного ржавый. но идея должна быть прочной: см. http://msdn.microsoft.com/en-us/library/bb549218.aspx#Y0

Ответ 4

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

var bigInts = new List<BigInteger>();

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