数组移位函数如何处理切片?
package main
import "fmt"
func main() {
s := []int{2, 3, 5, 7, 11, 13}
for k, v := range s {
x, a := s[0], s[1:] // get and remove the 0 index element from slice
fmt.Println(a) // print 0 index element
}
}
Run Code Online (Sandbox Code Playgroud)
我从切片技巧中找到了一个示例,但无法正确使用。
https://github.com/golang/go/wiki/SliceTricks
x, a := a[0], a[1:]
Run Code Online (Sandbox Code Playgroud)
编辑你能解释一下为什么 x 在这里未定义吗?
基于答案并与 SliceTricks 合并
import "fmt"
func main() {
s := []int{2, 3, 5, 7, 11, 13}
fmt.Println(len(s), s)
for len(s) > 0 {
x, s = s[0], s[1:] // undefined: x
fmt.Println(x) // undefined: x
}
fmt.Println(len(s), s)
}
Run Code Online (Sandbox Code Playgroud)
例如,
package main
import "fmt"
func main() {
s := []int{2, 3, 5, 7, 11, 13}
fmt.Println(len(s), s)
for len(s) > 0 {
x := s[0] // get the 0 index element from slice
s = s[1:] // remove the 0 index element from slice
fmt.Println(x) // print 0 index element
}
fmt.Println(len(s), s)
}
Run Code Online (Sandbox Code Playgroud)
输出:
6 [2 3 5 7 11 13]
2
3
5
7
11
13
0 []
Run Code Online (Sandbox Code Playgroud)
参考:
回答编辑问题的附录:
宣布x,
package main
import "fmt"
func main() {
s := []int{2, 3, 5, 7, 11, 13}
fmt.Println(len(s), s)
for len(s) > 0 {
var x int
x, s = s[0], s[1:]
fmt.Println(x)
}
fmt.Println(len(s), s)
}
Run Code Online (Sandbox Code Playgroud)
输出:
6 [2 3 5 7 11 13]
2
3
5
7
11
13
0 []
Run Code Online (Sandbox Code Playgroud)
您可以为任何切片类型复制并粘贴我的代码;它推断 的类型x。如果类型发生变化,则不必更改s。
for len(s) > 0 {
x := s[0] // get the 0 index element from slice
s = s[1:] // remove the 0 index element from slice
fmt.Println(x) // print 0 index element
}
Run Code Online (Sandbox Code Playgroud)
对于您的版本, 的类型是显式的,如果更改 的x类型,则必须更改。s
for len(s) > 0 {
var x int
x, s = s[0], s[1:]
fmt.Println(x)
}
Run Code Online (Sandbox Code Playgroud)