Ce serait pratique de pouvoir dire quelque chose comme:
for _, element := reverse range mySlice {
...
}
Non, il n'y a pas d'opérateur pratique à ajouter à la plage en place. Vous devrez faire un compte à rebours normal pour la boucle:
s := []int{5, 4, 3, 2, 1}
for i := len(s)-1; i >= 0; i-- {
fmt.Println(s[i])
}
Vous pouvez également faire:
Production:
Aussi ici: http://play.golang.org/p/l7Z69TV7Vl
la source
Variation avec index
la source
Que diriez-vous d'utiliser différer:
la source
defer
mais je pense que l'utiliser dans une boucle pour inverser est assez délicat et devrait être assez inefficace en termes de mémoire.defer
d'une manière pour laquelle il n'est pas prévu. Ne l'utilisez pas car cela peut avoir des effets secondaires désagréables (exécution dans le désordre). Utilisez simplement lafor
boucle dans la réponse acceptée. Go vise à minimiser ce genre de hacks intelligents (pas) car ils ont tendance à vous mordre le cul plus tard.On pourrait utiliser un canal pour inverser une liste dans une fonction sans la dupliquer. Cela rend le code plus agréable à mon sens.
la source
[]interface{}
? Parce que la fonction actuellereverse
ne prend en charge que les chaînes.func reverse(lst []interface{}) chan inyterface{}
ne prendra plus une chaîne [] comme entrée. Même si la chaîne peut être castée dans l'interface {}, la chaîne [] ne peut pas être castée dans [] interface {}. Malheureusement, la fonction inverse actuelle est le genre de fonction qui a beaucoup besoin d'être réécrite.Lorsque j'ai besoin d'extraire des éléments d'une tranche et d'une plage inversée, j'utilise quelque chose comme ce code:
Production:
Aire de jeu: https://play.golang.org/p/gx6fJIfb7fo
la source