2011-11-18 53 views
5

拿起備用的項目我有一個字符串數組以下項目:使用跳過,並採取在一個陣列

string s = "M,k,m,S,3,a,5,E,2,Q,7,E,8,J,4,Y,1,m,8,N,3,P,5,H"; 
var items = s.split(','); 
var topThree = items.Take(3); 
var alternating1 = items.Skip(3).Take(1).Skip(1).Take(1).Skip(1).Take(1).Skip(1).Take(1); 

的alternating1變量什麼也沒有,我想我明白這是爲什麼。跳過之後,接受它返回1個項目,然後嘗試跳過(1)和跳轉(1),但那裏沒有任何東西。

有沒有一種方法可以做到這種交替模式?

+0

是「S」總是將是一個字符串? –

回答

11

最簡單的方法是使用Where超載這需要一個索引:

var alternating = input.Where((value, index) => (index & 1) == 0); 

或者用% 2代替,等效:

var alternating = input.Where((value, index) => (index % 2) == 0); 
+1

該測試不應該是'(index&1)== 0'嗎?如果不是,爲什麼不呢? –

+0

@DavidKemp:是的,應該。固定,謝謝:) –

+2

關於風格的一個小小挑剔:不會使用'index%2'比'index&1'更能表示代碼的高級目的嗎?查詢的目的是返回每一個其他項目,而不是執行位操作。 – LukeH