Go:了解映射鍵中的迭代順序
在 Go 程式語言中,映射被實作為雜湊。 Go 程式語言規範中沒有明確指定映射鍵的迭代順序,因為它可能會根據實作而變化。
雜湊函數和等價
Go運行時使用 C 編寫的統一 hashmap 實作。 map[string]T 和map[byte]T 之間的唯一區別在於雜湊函數、等價函數和複製
有序迭代與隨機迭代
在Go 1 之前,映射鍵的迭代順序僅在發生鍵衝突時才依賴插入順序。否則,順序與鍵類型或插入順序無關。
但是,在最新的 Go 每週版本和 Go 1 中,迭代順序已被隨機化。偽隨機選擇的密鑰啟動迭代,並透過偽隨機數進行雜湊碼計算。此變更可確保每次執行程式時的順序都不同,即使使用相同的輸入資料也是如此。
字串映射:巧合
您對字串映射的觀察顯然有一個可預測的迭代順序是巧合的。雖然特定運行的順序可能保持不變,但不能保證,並且在不同的執行中可能會有所不同。
以上是為什麼Go Map Key的迭代順序無法保證並且經常出現隨機?的詳細內容。更多資訊請關注PHP中文網其他相關文章!