Seria conveniente ser capaz de dizer algo como:
for _, element := reverse range mySlice {
...
}
Não, não há um operador conveniente para adicionar ao alcance um existente. Você terá que fazer uma contagem regressiva normal do loop for:
s := []int{5, 4, 3, 2, 1}
for i := len(s)-1; i >= 0; i-- {
fmt.Println(s[i])
}
Você também pode fazer:
Resultado:
Também aqui: http://play.golang.org/p/l7Z69TV7Vl
fonte
Variação com índice
fonte
Que tal usar adiar:
fonte
defer
mas acredito que usar isso dentro de um loop para reverso é bastante complicado e deve ser bastante ineficaz em termos de memória.defer
de uma forma para a qual não se destina. Não use isso, pois pode ter efeitos colaterais desagradáveis (execução fora de ordem). Basta usar ofor
loop na resposta aceita. O objetivo do Go é minimizar esse tipo de hacks inteligentes (não), uma vez que eles tendem a morder sua bunda mais tarde.Pode-se usar um canal para reverter uma lista em uma função sem duplicá-la. Isso torna o código mais agradável no meu sentido.
fonte
[]interface{}
? Porque areverse
função presente só suporta strings.func reverse(lst []interface{}) chan inyterface{}
não aceitará mais uma string [] como entrada. Mesmo que a string possa ser convertida na interface {}, [] string não pode ser convertida na [] interface {}. Infelizmente, a função reversa atual é o tipo de função que precisa ser muito reescrita.Quando preciso extrair elementos de uma fatia e intervalo reverso, uso algo como este código:
Resultado:
Playground: https://play.golang.org/p/gx6fJIfb7fo
fonte