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

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

Barbara Streisand
Barbara Streisand原创
2024-12-16 06:11:16694浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn