讓我們看下面的Go代碼:package mainimport "fmt"type Vertex struct { Lat, Long float64}var m map[string]Vertexfunc main() { m = make(map[string]Vertex) m["Bell Labs"] = Vertex{ 40.68433, 74.39967, } m["test"] = Vertex{ 12.0, 100, } fmt.Println(m["Bell Labs"]) fmt.Println(m)}它輸出以下內容:{40.68433 74.39967}map[Bell Labs:{40.68433 74.39967} test:{12 100}]但是,如果我更改測試頂點聲明的一小部分,請向右移動“ }” 4個空格,如下所示:m["test"] = Vertex{ 12.0, 100,}..然后輸出更改為:{40.68433 74.39967}map[test:{12 100} Bell Labs:{40.68433 74.39967}]為什么修改很少會影響我的地圖順序?
2 回答

精慕HU
TA貢獻1845條經驗 獲得超8個贊
映射的“順序”取決于所使用的哈希函數。哈希函數被隨機化,以防止使用哈希沖突的拒絕服務攻擊。有關詳細信息,請參見問題跟蹤器:
http://code.google.com/p/go/issues/detail?id=2630
根據規范不能保證地圖順序。盡管在當前的go實現中尚未完成,但將來的實現可能會在GC或其他操作期間進行某些壓縮,這些操作會更改映射的順序,而無需通過代碼修改映射。假定規范中未定義屬性是不明智的。
映射是一種無序的一組元素,稱為元素類型,由一組另一種類型的唯一鍵(稱為鍵類型)索引。
- 2 回答
- 0 關注
- 255 瀏覽
添加回答
舉報
0/150
提交
取消