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 關注
- 134 瀏覽
添加回答
舉報