为了账号安全,请及时绑定邮箱和手机立即绑定

当我使用 golang 的 append 函数创建 2D 切片时,切片中的先前值发生了变化

当我使用 golang 的 append 函数创建 2D 切片时,切片中的先前值发生了变化

Go
撒科打诨 2022-05-23 15:09:06
这是我的代码:package srcfunc 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}我调试它。发现:计算sets[22]时,sets[15]从[]int{1,2,3,4}变为[]int{1,2,3,5}发生了什么。
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

问题是setskind 的元素引用了同一个 slice。


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


这是一个复制前一个向量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


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信