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)
}
}
// reverse range
// Go Playground: https://play.golang.org/p/gx6fJIfb7fo
package main
import (
"fmt"
)
type Elem struct {
Id int64
Name string
}
type Elems []Elem
func main() {
mySlice := Elems{{Id: 0, Name: "Alice"}, {Id: 1, Name: "Bob"}, {Id: 2, Name: "Carol"}}
for i, element := range mySlice {
fmt.Printf("Normal range: [%v] %+v\n", i, element)
}
//mySlice = Elems{}
//mySlice = Elems{{Id: 0, Name: "Alice"}}
if last := len(mySlice) - 1; last >= 0 {
for i, element := last, mySlice[0]; i >= 0; i-- {
element = mySlice[i]
fmt.Printf("Reverse range: [%v] %+v\n", i, element)
}
} else {
fmt.Println("mySlice empty")
}
}
输出:
Normal range: [0] {Id:0 Name:Alice}
Normal range: [1] {Id:1 Name:Bob}
Normal range: [2] {Id:2 Name:Carol}
Reverse range: [2] {Id:2 Name:Carol}
Reverse range: [1] {Id:1 Name:Bob}
Reverse range: [0] {Id:0 Name:Alice}
8条答案
按热度按时间sd2nnvve1#
不,没有方便的运算符可以将它添加到范围1中,你必须做一个普通的
for
循环倒计时:flvlnr442#
您还可以执行以下操作:
输出:
也在这里:http://play.golang.org/p/l7Z69TV7Vl
vlf7wbxs3#
指数变化
gywdnpxw4#
如何使用defer:
bprjcwpo5#
你可以使用一个通道来反转函数中的列表,而不需要复制它。在我看来,这会使代码更好。
yzckvree6#
在2022年,你可以使用泛型来反转任何切片:
qojgxg4l7#
当我需要从一个切片中提取元素并反转范围时,我使用了类似于下面的代码:
输出:
Playground:https://play.golang.org/p/gx6fJIfb7fo
ylamdve68#
可以使用go-funk中的
funk.ForEachRight
方法: