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

遍历数组类型的映射键并对每个数组进行切片为每次迭代提供相同的数组

遍历数组类型的映射键并对每个数组进行切片为每次迭代提供相同的数组

Go
慕码人8056858 2022-06-21 16:51:42
当尝试将映射的 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作为底层数组的切片也将被覆盖。

和你一样,为每次迭代复制数组。这将为您附加的切片创建单独的数组。


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号