2012-10-26 41 views

Trả lời

22
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ành

% Operator

+1

+1, tôi quên, mà ' where' cũng có quá tải với chỉ mục :) –

8

Phần còn lại là bạn của bạn.

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

% Operator (C# Reference)

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.

E.Lippert: What's the difference? Remainder vs Modulus

+1

+1 cho liên kết E.Lippert. – Askolein

11

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(); 
+2

+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

+1

http://stackoverflow.com/questions/2229107/what-is-the-fastest-way-to-find-if-a-number-is-even-or-odd –

Các vấn đề liên quan