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中文网其他相关文章!