首頁 > 後端開發 > Golang > 如何按照插入順序迭代Go Map?

如何按照插入順序迭代Go Map?

Barbara Streisand
發布: 2024-12-19 20:52:16
原創
247 人瀏覽過

How Can I Iterate Through a Go Map in the Order of Insertion?

以插入順序迭代 Go Map

傳統觀點認為 Go Map 的迭代順序是不可預測且不穩定的。然而,實作順序保留需要利用獨立維護插入序列的替代資料結構:

1。追蹤單獨切片中的鍵:

透過按照插入順序維護鍵切片,您可以迭代這些鍵並從映射中檢索其對應的值。這消除了對重複資料的需求,並提供了可靠的迭代序列。

2.使用帶有連結清單的值包裝器:

另一種方法涉及使用包含對插入順序中下一個鍵的引用的結構來包裝映射中的每個值。這允許按預期順序遍歷元素,即使在刪除或插入之後也是如此。

比較:

兩種方法都保留了使用映射的優點,同時提供有序迭代。然而,使用單獨的鍵切片的方法具有更簡單的實現,但在刪除元素時可能會產生開銷。鍊錶方法提供了更快的刪除速度,但引入了更多的複雜性。

程式碼片段:

切片中的鍵:

type Map struct {
    m    map[Key]Value
    keys []Key
}

func (m *Map) Set(k Key, v Value) {
    // ...
    m.keys = append(m.keys, k)
    // ...
}
登入後複製

帶有連結的值包裝清單:

type valueWrapper struct {
    value Value
    next  *Key
}

type Map struct {
    m           map[Key]valueWrapper
    first, last *Key
}

func (m *Map) Set(k Key, v Value) {
    // ...
    if m.last != nil {
        w := m.m[*m.last]
        m.m[*m.last] = valueWrapper{w.v, &k}
    }
    // ...
}
登入後複製

透過使用這些技術,您可以有效地迭代 Go 映射並按照最初插入的順序檢索項目。

以上是如何按照插入順序迭代Go Map?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板