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 }
答案 0 :(得分:23)
int[] list = a.Where((value, index) => index % 2 == 0)
.ToArray();
它只会选择偶数索引,由%
(mod)运算符计算。
5 % 2 // returns 1
4 % 2 // returns 0
根据MSDN:
答案 1 :(得分:11)
使用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();
答案 2 :(得分:8)
余数运算符是你的朋友。
int[] everySecond = a.Where((i, ind) => ind % 2 == 0).ToArray();
%运算符在除去第一个操作数后计算余数 到了第二个。所有数字类型都有预定义的余数运算符。