Re[2]: LINQ - Как получить частичные суммы ряда?
От: Andir Россия
Дата: 06.09.09 18:33
Оценка:
Здравствуйте, Пельмешко, Вы писали:

П>На F# без проблем:

П>
П>let nums = [ 1; 2; 3; 4 ]
П>let sums = nums |> List.scan_left (+) 0 |> List.tl
П>


П>Чем бы заменить scan в Linq...


Реализовать:
public static class ScanExtensions
{
    public static IEnumerable<TResult> ScanLeft<T, TResult>(
        this IEnumerable<T> items, 
        Func<TResult, T, TResult> func, 
        TResult start)
    {
        TResult accum = start;
        foreach(var item in items)
        {
            accum = func(accum, item);
            yield return accum;
        }
    }
    
    public static IEnumerable<int> ScanLeft(
        this IEnumerable<int> items, 
        int start)
    {
        return items.ScanLeft((x, accum) => accum + x, start);
    }
    
    public static IEnumerable<int> ScanLeft0(
        this IEnumerable<int> items)
    {
        return items.ScanLeft(0);
    }
}


И использовать:

var sums = new [] { 1, 2, 3, 4, 5 }.ScanLeft0();


С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 1233 ) { /* Работаем */ }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.