首先,我对组合键的定义-两个或更多的值组合在一起构成键。不要与数据库中的组合键混淆。
我的目标是将pow(x,y)的计算值保存在哈希表中(x和y是整数)。在这里,我需要有关如何制作键的想法,以便在给定x和y的情况下,可以在哈希表中查找它,以找到pow(x,y)。
例如。 pow(2,3)=> {key(2,3):8} 我想弄清楚获取key(2,3)的功能/方式。
通常,当在哈希表中用作键时,处理键的最佳方法是多个值的组合。
谢谢
答案 0 :(得分:9)
最简单,最灵活的方法是使用// optimize-inline
作为密钥类型,包括您想成为密钥一部分的所有数据,因此在您的情况下:
struct
仅此而已。使用它:
type Key struct {
X, Y int
}
输出(在Go Playground上尝试):
m := map[Key]int{}
m[Key{2, 2}] = 4
m[Key{2, 3}] = 8
fmt.Println("2^2 = ", m[Key{2, 2}])
fmt.Println("2^3 = ", m[Key{2, 3}])
Spec: Map types:您可以使用任何类型作为键,以完全定义比较运算符2^2 = 4
2^3 = 8
和==
,并且上述!=
结构类型可以满足要求。
Spec: Comparison operators:如果所有字段的值都是可比较的,则结构值是可比较的。如果两个结构值对应的非blank字段相等,则它们相等。
重要的一点:您不应该将指针用作键类型(例如Key
),因为比较指针仅比较内存地址,而不是指针值。
还请注意,您还可以使用arrays(而不是slices)作为键类型,但是数组不如结构灵活。您可以在此处了解更多信息:Why have arrays in Go?
这是数组的样子:
*Key
输出是相同的。在Go Playground上尝试一下。
答案 1 :(得分:4)
Go不能对一片int进行哈希处理。
因此,我要解决的方法是将结构映射到数字。
以下是该操作的示例:
package main
import (
"fmt"
)
type Nums struct {
num1 int
num2 int
}
func main() {
powers := make(map[Nums]int)
numbers := Nums{num1: 2, num2: 4}
powers[numbers] = 6
fmt.Printf("%v", powers[input])
}
我希望对您有帮助