【发布时间】:2011-12-25 15:54:21
【问题描述】:
我正在尝试在 Go 中创建一个以大整数为键的地图。 Effective Go 明确表示:
结构、数组和切片不能用作映射键,因为在这些类型上没有定义相等性。
这是有道理的。我当然可以将大整数转换为字符串并将字符串用作键,但我在这里寻找更通用的解决方案。我可以将我的结构包装到实现相等函数的东西(接口?)中并改用它吗?
当然不起作用的示例代码:
package main
import (
"big"
"fmt"
)
func main() {
one1 := big.NewInt(1)
one2 := big.NewInt(1)
hmap := make(map[*big.Int] int)
hmap[one1] = 2
_, exists := hmap[one2]
fmt.Printf("Exists=%v\n", exists)
}
【问题讨论】:
-
这不仅仅是平等。
map是一个哈希表,所以每个key类型也需要一个哈希函数 -
是的。而且我忘记了,因为 big.Int 是可变的(我不喜欢)将它们放在哈希表中可能不是那么聪明。也许我应该坚持使用函数式编程:)
标签: go