附加到切片切片 - 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
我正在尝试实现一个 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