首頁 >後端開發 >Golang >如何為 Go Map 實作自訂鍵相等?

如何為 Go Map 實作自訂鍵相等?

Barbara Streisand
Barbara Streisand原創
2025-01-02 21:31:39916瀏覽

How Can I Implement Custom Key Equality for Go Maps?

Go Map 的自訂鍵相等

在Go 中建立映射時,可以使用任何類型作為鍵,只要它實現類似的介面.預設情況下,Go 使用內建的相等運算子 (==) 來比較鍵。但是,在某些情況下,您可能想要定義自己的相等標準。

範例

考慮以下自訂鍵類型:

type Key struct {
    a *int
}

要比較 Key 的兩個實例,您需要使用自己的 Equal function:

func Equal(x Key, y Key) bool {
    return *x.a == *y.a
}

解決方法

不幸的是,Go 不允許您為映射鍵指定自訂雜湊或相等函數。相反,您可以使用以下解決方法:

  1. 派生鍵屬性: 派生屬性(例如整數或字串),而不是直接使用Key 結構作為鍵作為密鑰的身份。確保僅在語義相同的鍵上發生衝突。
  2. 實作雜湊函數:在 Key 上建立一個方法,計算派生屬性並將其作為整數傳回(用於雜湊)。
func (k *Key) HashKey() int {
    return *(*k).a
}

範例用法

使用上面的範例,對應將是:

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

注意事項

請記住,這種方法依賴於不變性派生的關鍵屬性。如果 Key 結構中的任何欄位發生更改,則金鑰的身份也會發生更改,並且它將無法按預期工作。

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

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