附加到切片切片 - golang

Append to slice of slices - golang

我正在尝试实现一个 golang 函数来解决数组子集问题。我在将整数切片硬复制到我的 2D 切片时遇到问题:

// Subsets
func Subsets(nums []int) [][]int {
    // create 2D slice
    sets := make([][]int, 0)
    backtrack(sets, make([]int, 0), nums, 0)
    return sets
}

func backtrack(sets [][]int, tempList []int, nums []int, start int) {
    // insert current list
    sets = append(sets, tempList)           // <---------HERE
    for i := start; i < len(nums); i++ {
        tempList = append(tempList, nums[i])
        backtrack(sets, tempList, nums, i+1)
        tempList = tempList[:len(tempList)-1]
    }
}

我尝试将追加语句替换为:

    buffer := make([]int, len(tempList))
    copy(buffer, tempList)
    sets = append(sets, buffer)

但是当程序结束时我仍然看到集合切片是空的。此函数的相同副本在 java 中工作正常,附加行如下:

    list.add(new ArrayList<>(tempList));

在 golang 中执行此操作的正确方法是什么?

我不确定这里的具体要求是什么。但有几点需要注意: 按值传递:您正在将 sets 传递给 backtrack 函数。当你这样做时,Go 复制它的值并将它传递给 backtrack 函数。但是,修改后的 sets 不会返回。 随时随地查看这些变化 Play ground。 https://go.dev/play/p/gULT7UcChI1