C# 4.0. Làm thế nào có thể sau đây được thực hiện bằng cách sử dụng biểu thức lambda?Chọn mọi phần tử thứ hai từ mảng bằng 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. Làm thế nào có thể sau đây được thực hiện bằng cách sử dụng biểu thức lambda?Chọn mọi phần tử thứ hai từ mảng bằng 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();
Nó sẽ chỉ chọn chỉ số thậm chí, như tính toán của các nhà điều hành %
(mod).
5 % 2 // returns 1
4 % 2 // returns 0
Theo MSDN:
hànhPhần còn lại là bạn của bạn.
int[] everySecond = a.Where((i, ind) => ind % 2 == 0).ToArray();
Nhà điều hành% tính phần còn lại sau khi chia toán hạng đầu tiên bởi thứ hai của mình. Tất cả các loại số đều có các toán tử còn lại được xác định trước.
+1 cho liên kết E.Lippert. – Askolein
Một cách tiếp cận sử dụng Enumerable.Range
var result = Enumerable.Range(0, a.Length/2)
.Select(i => a[2*i])
.ToArray();
Hoặc sử dụng Bitwise cho hiệu quả hơn để kiểm tra thậm chí:
var result = a.Where((i, index) => (index & 1) == 0)
.ToArray();
+1 cho phép thử bit/lẻ thậm chí còn hiệu quả hơn nhiều so với toán tử '%'. Vì vậy, sang trọng :-) – Askolein
http://stackoverflow.com/questions/2229107/what-is-the-fastest-way-to-find-if-a-number-is-even-or-odd –
+1, tôi quên, mà ' where' cũng có quá tải với chỉ mục :) –