有没有办法在Go中反向切片?
能够说出如下内容会很方便:
for _, element in reverse range mySlice { ... }
没有没有方便的运营商为此增加了一个到位的范围。 你必须做一个正常的循环倒计时:
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
人们可以使用一个通道来反转一个函数中的列表而不用重复它。 它使我的意义上的代码更好。
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) } }
如何使用延迟:
s := []int{5, 4, 3, 2, 1} for i, _ := range s { defer fmt.Println(s[i]) }
与索引的变化
for k := range s { k = len(s) - 1 - k // now k starts from the end }