2011-11-18 7 views
5

Mam tablicę ciągów z następujących elementów:Korzystanie przejść i wziąć się podnieść alternatywne elementy w tablicy

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); 

Zmienna alternating1 ma nic w nim i myślę, że rozumiem dlaczego. Po przeskoczeniu, a następnie Take it zwraca 1 pozycję w nim, a następnie próbuje przejść (1) i Take (1), ale nic tam nie ma.

Czy istnieje sposób, w jaki mogę wykonać ten naprzemienny wzór?

+0

Czy „s” zawsze będzie ciągiem ? –

Odpowiedz

11

Najprostszym rozwiązaniem byłoby użyć przeciążenie Where który bierze indeks:

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

lub wykorzystanie % 2 zamiast równoważnie:

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

Czy ten test nie powinien być "(indeks i 1) == 0"? Jeśli nie, dlaczego nie? –

+0

@DavidKemp: Tak, powinno. Naprawiono, dziękuję :) –

+2

Mniejsza nitka o stylu: czy użycie "index% 2" nie byłoby bardziej wskazujące na cel wysokiego poziomu kodu niż 'index & 1'? Celem zapytania jest zwrócenie co drugiego elementu, a nie wykonywanie bit-twiddling. – LukeH

Powiązane problemy