Выберите каждый второй элемент из массива, используя лямбда С# 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(); Ответ 3 Оператор остатка - ваш друг. int[] everySecond = a.Where((i, ind) => ind % 2 == 0).ToArray(); % Оператор (ссылка С#) Оператор% вычисляет остаток после деления его первого операнда его вторым. Все числовые типы имеют предопределенные операторы остатка. E.Lippert: В чем разница? Остаток против Модуля
Ответ 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();
Ответ 3 Оператор остатка - ваш друг. int[] everySecond = a.Where((i, ind) => ind % 2 == 0).ToArray(); % Оператор (ссылка С#) Оператор% вычисляет остаток после деления его первого операнда его вторым. Все числовые типы имеют предопределенные операторы остатка. E.Lippert: В чем разница? Остаток против Модуля