该代码的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/

10-13 04:23