3 回答

TA贡献1804条经验 获得超3个赞
在 for 循环中,循环变量在每次迭代时都会被覆盖。也就是说,是一个数组,对于每次迭代,都会用映射中的下一项覆盖 的内容。由于您添加了切片(只是数组上的视图),因此所有切片都作为后备数组,并且它们都具有相同的内容,即无论最后迭代的元素是什么。valvalval
要修复,请复制阵列:
for val := range myMap {
val:=val
array = append(array, val[:])
}

TA贡献1856条经验 获得超5个赞
您每次都会追加循环迭代器变量,该变量在每次迭代时都会更新。您需要改为追加本地范围的副本:
for val := range myMap {
v := val
array = append(array, v[:])
}

TA贡献1820条经验 获得超10个赞
根据 Adrian 的建议,使用简单的程序重新创建代码,如下所示:
package main
import (
"fmt"
)
func main() {
test()
}
func test() {
myMap := make(map[[3]int]bool)
myMap[[3]int{1, 2, 3}] = true
myMap[[3]int{0, 5, 4}] = true
myMap[[3]int{9, 7, 1}] = true
myMap[[3]int{0, 2, 8}] = true
array := [][]int{}
for val := range myMap {
key := val
array = append(array, key[:])
}
fmt.Println(array)
}
输出:
[[1 2 3] [0 5 4] [9 7 1] [0 2 8]]
- 3 回答
- 0 关注
- 113 浏览
添加回答
举报