首页 > 后端开发 > Golang > 如何在 Go Map 中实现自定义键比较?

如何在 Go Map 中实现自定义键比较?

Barbara Streisand
发布: 2024-12-16 06:11:16
原创
691 人浏览过

How Can I Implement Custom Key Comparison in Go Maps?

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

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