C # - промежуточный итог с использованием Aggregate () - PullRequest
0 голосов
/ 03 декабря 2009

Этот вопрос был задан на собеседовании. Мне нужно иметь промежуточный итог ( только с использованием Aggregate () )

из массива

(т.е.)

int[] array={10,20,30};

Expected output

10
30
60

когда я использую Aggregate ( Я применил какую-то худшую логику )

array.Aggregate((a, b) => { Console.WriteLine(a + b); return (a + b); });

1) It prints 30,60, для меня нет смысла возвращаться (a + b).

2) Чтобы напечатать 10, мне нужно изменить массив, добавив нулевой элемент (т.е.) {0,10,20,30}.

Есть ли какая-нибудь аккуратная работа, которая могла бы помочь?

Ответы [ 5 ]

5 голосов
/ 03 декабря 2009

вместо array.Aggregate(0, (a, b) => { Console.WriteLine(a + b); return (a + b); });: -)

2 голосов
/ 03 декабря 2009

Aggregate имеет другие перегрузки, которые работают немного по-другому - взгляните на это: http://msdn.microsoft.com/en-us/library/bb549218.aspx:

public static TAccumulate Aggregate<TSource, TAccumulate>(
    this IEnumerable<TSource> source,
    TAccumulate seed,
    Func<TAccumulate, TSource, TAccumulate> func )
1 голос
/ 03 декабря 2009
array.Aggregate(0, (progress, next) => { Console.WriteLine(progress + next); return (progress + next); });

Используйте версию Aggregate, которая начинает агрегирование с начальным значением, вместо того, чтобы начинать агрегирование с первой парой.

1 голос
/ 03 декабря 2009
array.Aggregate(0, (a, b) => 
{ 
    Console.WriteLine(a + b); 
    return a + b;
});
1 голос
/ 03 декабря 2009

Вы должны указать начальное значение как 0:

int[] array = { 10, 20, 30 };
array.Aggregate(0, (a, b) => { Console.WriteLine(a + b); return a + b; });

Это выведет то, что вы ожидаете.

...