我创建了一组 int 数组(以保持唯一的三元组),并且在执行一些步骤后需要返回三元组列表。以下代码段仅显示了尝试进行此转换的部分,并且那里出现了问题。生成的 2D 切片正在复制三胞胎。请帮我解决以下问题:以下代码有什么问题?进行这种转换的正确方法应该是什么?尝试游乐场func main() { setOfTriplets := make(map[[3]int]struct{}) // Oversimplified steps here just to show some usage of the setOfTriplets. t1, t2 := [3]int{1, 2, 3}, [3]int{4, 5, 6} setOfTriplets[t1] = struct{}{} setOfTriplets[t2] = struct{}{} // Convert the triplets to 2D slice (because that's what I need in the bigger problem) matrix := make([][]int, 0, len(setOfTriplets)) for t, _ := range setOfTriplets { // array to slice st := t[:] // PROBLEM: Something unkown happening here. matrix = append(matrix, st) } // PROBLEM: // Expected Output: [[1 2 3] [4 5 6]] // Actual Output: [[1 2 3] [1 2 3]] and sometimes [[4 5 6] [4 5 6]] fmt.Println(matrix)}
1 回答
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
您正在使用循环变量来创建切片。循环变量是一个数组,每次迭代都会被覆盖。在第一次迭代中,如果tiplet 是[1,2,3],则将其复制到t并从中创建一个切片。下一次迭代将用 覆盖t,[4,5,6]这也将覆盖您之前添加到列表中的三元组。
要修复,请创建数组的副本:
for t, _ := range setOfTriplets {
t:=t // Copy the array
// array to slice
st := t[:]
matrix = append(matrix, st)
}
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消