gpt4 book ai didi

go - 当我使用golang的append函数创建2D slice 时, slice 中的前一个值会更改

转载 作者:行者123 更新时间:2023-12-01 22:40:33 26 4
gpt4 key购买 nike

这是我的代码:

package src

func Subsets(nums []int) [][]int {
var sets = make([][]int, 0)
var t = make([]int, 0)
sets = append(sets, t)
for i := 0; i < len(nums); i++ {
for _, v := range sets {
t = append(v, nums[i])
sets = append(sets, t) }
}
return sets
}

测试数据为[] int {1,2,3,4,5}
我调试它。发现:

计算集合[22]时,集合[15]从[] int {1,2,3,4}更改为[] int {1,2,3,5}

发生了什么。

最佳答案

问题在于,sets类的元素引用同一 slice 。

您最好为sets的每个元素创建一个新 slice 。追加不会创建新的 slice 。

这是一个修复程序,它复制了sets的先前向量,而不是简单地对其进行扩展。

package src

func Subsets(nums []int) [][]int {
var sets = make([][]int, 0)
var t = make([]int, 0)
sets = append(sets, t)
for i := 0; i < len(nums); i++ {
for _, v := range sets {
t = append([]int(nil), v...) // t is copy of v
t = append(t, nums[i])
sets = append(sets, t)
}
}
return sets
}

在这里测试: https://play.golang.org/p/OZ9nN_t3w9D

关于go - 当我使用golang的append函数创建2D slice 时, slice 中的前一个值会更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60682028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com