如何解决排列数组类型的映射键并切片每个数组会为每次迭代提供相同的数组
在尝试将地图的int数组键添加到int slice的切片时,无法按预期进行范围调整和使用arr[:]
来切片数组。结果切片仅包含映射中“第一个”键的重复项(注释为循环)。但是,将数组键复制到另一个变量并切片新变量是可行的,并且结果切片包含不同的映射键值。我想知道为什么需要复制。 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 ansSlice
for k,_ := range ans {
ansSlice = append(ansSlice,k[:])
}*/
// however,this works
for k,_ := range ans {
key := k
ansSlice = append(ansSlice,key[:])
}
解决方法
由于地图键类型是数组,因此分配:
for k,_ := range ans {
将为每次迭代重写k
。这将重写数组k
的内容。切片k[:]
指向k
作为基础数组,因此所有以k
作为基础数组的切片也将被覆盖。
像您一样,为每次迭代复制数组。这样会为您添加的切片创建单独的数组。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。