能够说出类似的话会很方便:
for _, element in reverse range mySlice {
...
}
Run Code Online (Sandbox Code Playgroud)
Ulf*_*sen 111
没有方便的操作员可以将其添加到适当的范围.你必须做一个正常的循环倒计时:
s := []int{5, 4, 3, 2, 1}
for i := len(s)-1; i >= 0; i-- {
fmt.Println(s[i])
}
Run Code Online (Sandbox Code Playgroud)
zzz*_*zzz 35
你也可以这样做:
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
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
也在这里:http://play.golang.org/p/l7Z69TV7Vl
指数变化
for k := range s {
k = len(s) - 1 - k
// now k starts from the end
}
Run Code Online (Sandbox Code Playgroud)
可以使用通道在函数中反转列表而不复制它。在我看来,它使代码更好。
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)
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用延期:
s := []int{5, 4, 3, 2, 1}
for i, _ := range s {
defer fmt.Println(s[i])
}
Run Code Online (Sandbox Code Playgroud)
到 2022 年,您可以使用泛型就地反转任何切片:
func reverse[S ~[]E, E any](s S) {
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
s[i], s[j] = s[j], s[i]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37248 次 |
| 最近记录: |