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中文網其他相關文章!