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 不允許您為映射鍵指定自訂雜湊或相等函數。相反,您可以使用以下解決方法:
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中文網其他相關文章!