C#4.0從數組中選擇第二個元素。如何使用lambda表達式完成以下操作?使用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 }
C#4.0從數組中選擇第二個元素。如何使用lambda表達式完成以下操作?使用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 }
int[] list = a.Where((value, index) => index % 2 == 0)
.ToArray();
它只會選擇甚至指標,由%
(MOD)運算符計算。
5 % 2 // returns 1
4 % 2 // returns 0
根據MSDN:
求餘運算符是你的朋友。
int[] everySecond = a.Where((i, ind) => ind % 2 == 0).ToArray();
%運算計算通過它的第二分隔其第一個操作數 後的餘數。所有數字類型都有預定義的餘數運算
爲E.Lippert鏈接+1。 – Askolein
使用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();
+1用於按位奇數/偶數測試,這比'%'運算符效率高得多。所以優雅:-) – Askolein
http://stackoverflow.com/questions/2229107/what-is-the-fastest-way-to-find-if-a-number-is-even-or-odd –
+1,我忘了,那個'其中'也有索引超載:) –