该代码的slice2的返回值为[[1 1] [1 1]]。
这让我感到困惑,因为我期待的是[[0 0] [1 1]]。
我不知道为什么返回[[1 1] [1 1]]而不是[[0 0] [1 1]]。
如果有人可以解释我将不胜感激。谢谢。
slice := []int{0, 0}
slice2 := [][]int{}
for i := range slice {
slice[0] = i
slice[1] = i
slice2 = append(slice2, slice)
}
fmt.Println(slice2)
您可以在此链接中检查代码
play.golang.org
最佳答案
在您的情况下,您要追加一个slice(pointer)而不是slice的值。为了获得理想的结果,您必须在每次迭代中声明一个新的 slice ,并将新的 slice 附加到slice2。
func main() {
slice := []int{0, 0}
slice2 := [][]int{}
for i := range slice {
ns := []int{0, 0}
ns[0] = i
ns[1] = i
slice2 = append(slice2, ns)
}
fmt.Println(slice2) // Outputs: [[0 0] [1 1]]
}
Playground
关于go - Golang slice附加内置函数返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42352362/