首页 > 后端开发 > Golang > 如何为 Go Map 实现自定义键相等?

如何为 Go Map 实现自定义键相等?

Barbara Streisand
发布: 2025-01-02 21:31:39
原创
928 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板