Моя версия, которая является модификацией того, что я положил в комментарии, и возвращает IEnumerable, а не List, но ToList () это уладит.
Должно быть довольно эффективным.А кому не нравится использование yield return
?; -)
public IEnumerable<double> GetCumulativeSequence (IEnumerable<double> input)
{
var runningTotal = 0.0;
foreach (double current in input)
{
runningTotal+=current;
yield return runningTotal;
}
}
void Main()
{
List<double> list = new List<double> { 10.0, 20.0, 30.0, 40.0 };
var foo = GetCumulativeSequence(list);
}
Основным преимуществом этого является то, что он выполняет только один цикл над входным массивом.и если вы на самом деле не используете весь возвращенный материал (то есть вы смотрите только на первые три), то остальные не будут вычисляться.Потенциально полезен в длинных списках и т. Д. То же самое будет сказано о вещах, подобных ответу Криса Доггетта, но не обо всех, кто здесь использует linq.