我在 Golang 中使用地圖實現了一個稀疏矩陣,我注意到我的代碼在此更改后開始花費更長的時間來完成,在排除其他可能的原因之后,似乎罪魁禍首是地圖本身的迭代。Go Playground 鏈接(由于某種原因不起作用)。package mainimport ( "fmt" "time" "math")func main() { z := 50000000 a := make(map[int]int, z) b := make([]int, z) for i := 0; i < z; i++ { a[i] = i b[i] = i } t0 := time.Now() for key, value := range a { if key != value { // never happens fmt.Println("a", key, value) } } d0 := time.Now().Sub(t0) t1 := time.Now() for key, value := range b { if key != value { // never happens fmt.Println("b", key, value) } } d1 := time.Now().Sub(t1) fmt.Println( "a:", d0, "b:", d1, "diff:", math.Max(float64(d0), float64(d1)) / math.Min(float64(d0), float64(d1)), )}迭代超過 50M 項會返回以下時間:alix@local:~/Go/src$ go versiongo version go1.3.3 linux/amd64alix@local:~/Go/src$ go run b.go a: 1.195424429s b: 68.588488ms diff: 17.777154632611037我想知道,為什么與切片相比,迭代地圖的速度幾乎慢 20 倍?
- 2 回答
- 0 關注
- 196 瀏覽
添加回答
舉報
0/150
提交
取消