次のように言えると便利です。
for _, element := reverse range mySlice {
...
}
いいえ、これが所定の範囲に追加するための便利な演算子はありません。通常の for ループのカウントダウンを行う必要があります。
s := []int{5, 4, 3, 2, 1}
for i := len(s)-1; i >= 0; i-- {
fmt.Println(s[i])
}
次のこともできます。
s := []int{5, 4, 3, 2, 1}
for i := range s {
fmt.Println(s[len(s)-1-i]) // Suggestion: do `last := len(s)-1` before the loop
}
出力:
1
2
3
4
5
こちらもご覧ください: http://play.golang.org/p/l7Z69TV7Vl
指数による変動
for k := range s {
k = len(s) - 1 - k
// now k starts from the end
}
deferの使用はどうですか:
s := []int{5, 4, 3, 2, 1}
for i, _ := range s {
defer fmt.Println(s[i])
}
チャネルを使用して、関数内のリストを複製せずに逆にすることができます。私の感覚では、それはコードをより良くします。
package main
import (
"fmt"
)
func reverse(lst []string) chan string {
ret := make(chan string)
go func() {
for i, _ := range lst {
ret <- lst[len(lst)-1-i]
}
close(ret)
}()
return ret
}
func main() {
elms := []string{"a", "b", "c", "d"}
for e := range reverse(elms) {
fmt.Println(e)
}
}
これが配列を逆にする最も簡単な方法だと思います。
package main
import "fmt"
// how can we reverse write the array
func main() {
arr := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
revArr := [len(arr)]int{} // making empty array for write reverse
for i := range arr {
revArr[len(arr)-1-i] = arr[i]
}
fmt.Println(revArr)
}
go-funkfunk.ForEachRight
のメソッドを使用できます。
results := []int{}
funk.ForEachRight([]int{1, 2, 3, 4}, func(x int) {
results = append(results, x)
})
fmt.Println(results) // []int{4, 3, 2, 1}