為什麼 go 中的 map 的遍歷是隨機的?

2022-07-08 15:33:17 字數 630 閱讀 7206

雜湊表是無序的,這很好理解。

但是golang中的 map 兩次遍歷不但是無序的,而且兩次不相同,見下:

func f()  

m := map[int]int{}

for i := range s

//以下兩次輸出會相同嗎?

for k,v := range m

fmt.println("")

for k,v := range m

}

33 	55 	99 	88 	00 	11 	22 	44 	66 	77 	

55 99 33 11 22 44 66 77 88 00

答案是:no

檢視資料後,我才發現在go 1之前,兩次遍歷是相同的,但是為什麼官方要改掉呢?

其實是為了安全性和穩定性,go開發組發現有些程式設計師已經開始依賴遍歷順序穩定(不是有序)這個特性來開發程式,這其實並不好,因為這個「穩定」因平台不同而不同,在 win 上可能是 1342,但是在linux上可能就是4312。這會導致程式不可移植,因此go要求開發者自己實現穩定有序的遍歷。

go map 官方文件

go1 舊文件

mysql遍歷map中的陣列 遍歷Map的四種方法

public static void main string args map map new hashmap map.put 1 value1 map.put 2 value2 map.put 3 value3 第一種 普遍使用,二次取值 system.out.println 通過map.keys...

關於Go中的map

map的定義 m map string string m make map string int 空map var m map string int nil 遍歷 for k,v range map1 遍歷不保證順序,如果需要順序,需手動排序 獲取操作 value1 map key1 value1,...

java中Map的遍歷

map遍歷的常用方法 mapmap new hashmap map.put 0,zero map.put 1,one map.put 2,two 方法一 最常用的 獲取key值 collectionk map.keyset iteratoritk k.iterator system.out.prin...