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

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

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

Go
慕哥6287543 2023-08-14 17:51:34
这是我的代码: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 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

问题在于,sets类型的元素引用同一个切片。


您最好为 的每个元素创建一个新切片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


查看完整回答
反对 回复 2023-08-14
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

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