2013-09-02 14 views
12

Czy jest możliwe iteracyjne nad indeksów tablicy w języku iść i wybrać nie wszystkie indeksy ale rzucić nieco okresu (1, 2, 3 na przykład.pętli nad tablicy w Go języku

Na przykład

for i, v := range array { 
//do something with i,v 
} 

iteruje wszystkich indeksów w tablicy

Co chcę wiedzieć, czy jest jakaś szansa, aby coś takiego

for i:=1, v := range array { 
//do something with i,v 
i += 4 
} 

Odpowiedz

16

Co z

i := 1 
for _, v := range array { 
    // do something 
    i += 4 
} 

jeśli chcesz i-inne niż wartości indeksów, lub jeśli chcesz pominąć indeksy,

for i := 1; i < len(array); i += 4 { 
    v := array[i] 
} 

?

+0

Więc w tym przypadku Czy będę miał sekwencję v [1], v [4], v [8], ...? –

+0

Nie, nie będziesz musiał używać zakresu dla tego przypadku. –

+0

Wielkie dzięki. Dostałem to) –

0

Szukasz abstrakcji, która nie istnieje w Golang. Go jest "prosty" według projektu. Oczywiście sama prosta jest bardzo względnym i subiektywnym określeniem. Na przykład, następujący byłoby proste dla niektórych:

// This is not real Go code 
for index, value := range(array, stride = 4, start = 1) { 
     ... 
} 

To dlatego, że informuje kompilator, co robić, a nie, jak to zrobić - ostateczne abstrakcję - w jaki sposób można zmienić bez co zmienia. Ale w jaki sposób jest abstrahowany. Właśnie z tego powodu, inni woleliby:

// This *is* real Go code 
start := 1 // we start not at 0 but at one, just for fun 
stride := 4 // we skip 3 between this and the next one of interest 
for i: = start; i < len(array); i += stride { 
     ... 
} 

Kod ten mówi, jak coś jest zrobione, i jako efekt uboczny, powinieneś zrozumieć, co się robi. Trochę abstrakcji - ale to kompromis inżynieryjny, ponieważ jest zarówno szybki, jak i nieco prosty. Większość kompromisów inżynierskich Go błądzi po stronie prostoty i szybkości.

Go pozwala jednak na zbudowanie takiej abstrakcji przy niewielkim wysiłku.

+0

Muszę dodać, że brak abstrakcji w Go jest odświeżający po latach wykonywania C++, Java, Ruby - żadna z nich nie jest prosta i szybka. :RE – CppNoob

Powiązane problemy