10

C# 4.0。如何使用 lambda 表达式完成以下操作?

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 }
4

3 回答 3

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

它只会选择偶数索引,由%(mod) 运算符计算。

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

根据 MSDN:

% 操作员

于 2012-10-26T07:52:54.897 回答
10

另一种方法使用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();
于 2012-10-26T07:57:32.273 回答
8

余数运算符是你的朋友。

int[] everySecond = a.Where((i, ind) => ind % 2 == 0).ToArray();

% 运算符(C# 参考)

% 运算符计算第一个操作数除以第二个操作数后的余数。所有数字类型都有预定义的余数运算符。

E.Lippert:有什么区别?余数与模数

于 2012-10-26T07:54:53.900 回答