当尝试将映射的 int 数组键添加到 int 切片切片时,范围和使用arr[:]切片数组无法按预期工作。结果切片仅包含映射中“第一个”键的副本(注释掉 for 循环)。但是,将数组键复制到另一个变量并对新变量进行切片是可行的,结果切片包含不同的映射键值。我想知道为什么需要复制。数组键不是k在每次迭代时从映射中复制为新数组吗?我不知道在哪里可以找到有关此行为的文档,并希望获得链接和资源 :-)ansSlice := [][]int{}//ans is a map with [3]int key type/* For some reason, this doesn't work, and appends values from the same array to ansSlicefor k, _ := range ans { ansSlice = append(ansSlice, k[:])}*/// however, this worksfor k, _ := range ans { key := k ansSlice = append(ansSlice, key[:])}
1 回答

慕哥9229398
TA贡献1877条经验 获得超6个赞
由于映射键类型是数组,因此赋值:
for k,_ := range ans {
每次迭代都会重写k
。这将重写数组的内容k
。切片k[:]
指向k
作为底层数组,因此所有k
作为底层数组的切片也将被覆盖。
和你一样,为每次迭代复制数组。这将为您附加的切片创建单独的数组。
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消