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

Как выбрать значения в предоставленном диапазоне индексов из списка с помощью LINQ

Я новичок в LINQ, пытаясь использовать его, чтобы добиться следующих результатов:

У меня есть список ints: -

List<int> intList = new List<int>(new int[]{1,2,3,3,2,1});

Теперь я хочу сравнить сумму первых трех элементов [диапазон индексов 0-2] с последними тремя [диапазон индексов 3-5] с использованием LINQ. Я попробовал методы LINQ Select и Take extension, а также метод SelectMany, но я не могу понять, как сказать что-то вроде

(from p in intList  
where p in  Take contiguous elements of intList from index x to x+n  
select p).sum()

Я тоже смотрел на метод Содержит, но это не видит, чтобы получить то, что я хочу. Какие-либо предложения? Спасибо.

4b9b3361

Ответ 1

Используйте Пропустить, затем Возьмите.

yourEnumerable.Skip(4).Take(3).Select( x=>x )

(from p in intList.Skip(x).Take(n) select p).sum()

Ответ 2

Вы можете использовать GetRange()

list.GetRange(index, count);

Ответ 3

Для больших списков отдельный способ расширения может быть более подходящим для производительности. Я знаю, что это не обязательно для начального случая, но реализация Linq (для объектов) зависит от итерирования списка, поэтому для больших списков это может быть (бессмысленно) дорого. Простым методом расширения для этого может быть:

public static IEnumerable<TSource> IndexRange<TSource>(
    this IList<TSource> source,
    int fromIndex, 
    int toIndex)
{
    int currIndex = fromIndex;
    while (currIndex <= toIndex)
    {
        yield return source[currIndex];
        currIndex++;
    }
}