124

次のように言えると便利です。

for _, element := reverse range mySlice {
        ...
}
4

9 に答える 9

180

いいえ、これが所定の範囲に追加するための便利な演算子はありません。通常の for ループのカウントダウンを行う必要があります。

s := []int{5, 4, 3, 2, 1}
for i := len(s)-1; i >= 0; i-- {
   fmt.Println(s[i])
}
于 2012-11-02T08:07:25.400 に答える
56

次のこともできます。

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

于 2012-11-02T08:36:30.927 に答える
18

指数による変動

for k := range s {
        k = len(s) - 1 - k
        // now k starts from the end
    }
于 2016-10-29T20:59:34.767 に答える
6

deferの使用はどうですか:

s := []int{5, 4, 3, 2, 1}
for i, _ := range s {
   defer fmt.Println(s[i])
}
于 2016-02-18T02:25:33.097 に答える
5

チャネルを使用して、関数内のリストを複製せずに逆にすることができます。私の感覚では、それはコードをより良くします。

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)
    }
}
于 2014-11-01T19:07:06.343 に答える
2

これが配列を逆にする最も簡単な方法だと思います。

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)
}

https://play.golang.org/p/QQhj26-FhtF

于 2020-12-04T10:21:04.857 に答える
-2

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}
于 2021-07-24T19:07:18.720 に答える