首頁 > 後端開發 > Golang > 如何在 Go Map 中實現自訂鍵比較?

如何在 Go Map 中實現自訂鍵比較?

Barbara Streisand
發布: 2024-12-16 06:11:16
原創
692 人瀏覽過

How Can I Implement Custom Key Comparison in Go Maps?

Go Map 中的自訂鍵比較

在Go 中,映射需要可比較的鍵,但有時需要自訂相等操作。當自訂資料結構(例如使用者定義的結構)用作映射鍵時,就會發生這種情況。

為了規避此限制,一種解決方法是從用作映射的結構中派生一個單獨的屬性鑰匙。此派生屬性應具有所需的相等語義,並且本質上應可用作鍵。

考慮以下範例:

type Key struct {
    a *int
}

func (k *Key) HashKey() int {
    return *k.a
}
登入後複製

在此範例中,HashKey 方法衍生一個整數值,該值代表Key的身份。然後可以使用此派生屬性構造映射:

k1, k2 := Key{intPtr(1)}, Key{intPtr(2)}
m := map[int]string{}
m[k1.HashKey()] = "one"
m[k2.HashKey()] = "two"

fmt.Println(m) // Outputs: map[1:one 2:two]
登入後複製

請注意,鍵比較僅依賴 HashKey() 方法,允許自訂相等語義。

不變性注意事項

但是,使用這種方法時,不變性至關重要。如果原始結構體的欄位被修改,則該實例不能再用作映射鍵,因為它的身份已更改。

以上是如何在 Go Map 中實現自訂鍵比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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