首頁 >後端開發 >Golang >為什麼Go Map迭代是無序的,如何保證有序?

為什麼Go Map迭代是無序的,如何保證有序?

Susan Sarandon
Susan Sarandon原創
2024-12-29 05:20:13277瀏覽

Why is Go Map Iteration Unordered, and How Can I Guarantee Order?

Go 地圖列印亂序

在Go 中,地圖是使用雜湊表實現的,雜湊表以非有序的方式維護鍵值對。 - 訂購時尚。因此,迭代地圖並不能保證返回鍵或值的順序。

為什麼地圖列印不依序?

中根據提供的代碼,地圖月份是使用表示月份數字和相應名稱的鍵值對定義的。使用範圍迭代地圖時,列印輸出的順序基於哈希表的內部實現,該表通常針對效能而不是順序進行最佳化。

如何修復順序

有幾種方法可以保證map迭代的順序:

1.使用有序映射:

Go 沒有內建的有序映射類型,但有第三方函式庫提供此功能。其中一個函式庫是「github.com/golang/collections#OrderedMap。」

import "github.com/golang/collections#OrderedMap"

func main() {
    m := collections.NewOrderedMap()
    m.Set(1, "January") // ...

    for _, month := range m.Keys() {
        fmt.Println(month, "-", m.Get(month))
    }
}

2.對映射鍵進行排序:

另一個選擇是對映射鍵進行排序:

func main() {
    keys := make([]int, 0, len(months))
    for k := range months {
        keys = append(keys, k)
    }

    sort.Ints(keys)

    for _, k := range keys {
        fmt.Println(k, "-", months[k])
    }
}
另一個選擇是從映射中取得鍵,對它們進行排序,然後迭代排序後的鍵以按順序存取值。

以上是為什麼Go Map迭代是無序的,如何保證有序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn