web-dev-qa-db-fra.com

Boucle sur tableau en langue Go

Est-il possible de parcourir des index de tableaux dans le langage Go et de ne pas choisir tous les index mais de jeter une période (1, 2, 3 par exemple.

Par exemple,

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

itère sur tous les index du tableau

Ce que je veux savoir, c'est qu'il y a une chance d'avoir quelque chose comme ça

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

Quel est le problème avec

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

si vous voulez des valeurs i autres que des indices, ou si vous voulez ignorer les indices,

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

?

17
Lee Daniel Crocker

Vous recherchez une abstraction qui n'existe pas à Golang. Go est "simple" par conception. Bien sûr, simple est un terme très relatif et subjectif. Par exemple, ce qui suit serait simple pour certains:

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

C'est parce qu'il indique au compilateur quoi faire, pas comment le faire - une abstraction définitive - le comment pourrait changer sans changer quoi. Mais le comment est abstrait. C'est précisément pour cette raison que d'autres préféreraient:

// 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 {
        ...
}

Ce code vous indique comment quelque chose est fait et, en tant qu'effet secondaire, vous devez comprendre ce qui est fait. Peu d'abstraction - mais c'est un compromis d'ingénierie pour être à la fois un peu rapide et un peu simple. La plupart des compromis en matière d'ingénierie de Go vont du côté de la simplicité et de la rapidité.

Go vous laisse cependant construire une telle abstraction, avec un petit effort.

0
CppNoob