Выберите каждый второй элемент из массива, используя лямбда

С# 4.0. Как можно сделать следующее с использованием лямбда-выражений?

int[] a = new int[8] { 0, 1, 2, 3, 4, 5, 6, 7 };
// Now fetch every second element so that we get { 0, 2, 4, 6 }

Ответ 1

int[] list = a.Where((value, index) => index % 2 == 0)
              .ToArray();

Он будет выбирать только индексы, как рассчитывается оператором % (mod).

5 % 2 // returns 1
4 % 2 // returns 0

В соответствии с MSDN:

Оператор%

Ответ 2

Другой подход с использованием Enumerable.Range

var result = Enumerable.Range(0, a.Length/2)
                       .Select(i => a[2*i])
                       .ToArray();

Или используйте побитовое для более эффективного контроля даже:

var result = a.Where((i, index) => (index & 1) == 0)
              .ToArray();