为了账号安全,请及时绑定邮箱和手机立即绑定

使用键作为数组类型进行散列

使用键作为数组类型进行散列

Go
慕的地6264312 2021-09-21 22:33:43
如何在 Go for map 中创建一个键作为数组。例如在 ruby 中,我可以实现它:quarters = {  [1, 2, 3] => 'First quarter',  [4, 5, 6] => 'Second quarter',  [7, 8 ,9] => 'Third quarter',  [10, 11, 12] => 'Fourh quarter',}quarters[[1, 2, 3]] # => "First quarter"在 Golang 中看起来如何?
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

Go 中的数组类型(与切片不同)是可比较的,因此它没有什么神奇之处:您可以像任何其他地图一样定义它:map[KeyType]ValueTypewhere KeyTypewill be[3]int和ValueTypewill be string。


该比较操作符==和=必须为键类型的操作数被完全定义!; 因此键类型不能是函数、映射或切片。


m := map[[3]int]string{}


m[[3]int{1, 2, 3}] = "First quarter"

m[[3]int{4, 5, 6}] = "Second quarter"

m[[3]int{7, 8, 9}] = "Third quarter"

m[[3]int{10, 11, 12}] = "Fourth quarter"


fmt.Println(m)

输出:


map[[1 2 3]:First quarter [4 5 6]:Second quarter 

    [7 8 9]:Third quarter [10 11 12]:Fourth quarter]

在Go Playground上试一试。


要查询元素:


fmt.Println(m[[3]int{1, 2, 3}]) // Prints "First quarter"

您还可以一步创建地图:


m := map[[3]int]string{

    [3]int{1, 2, 3}:    "First quarter",

    [3]int{4, 5, 6}:    "Second quarter",

    [3]int{7, 8, 9}:    "Third quarter",

    [3]int{10, 11, 12}: "Fourth quarter",

}


查看完整回答
反对 回复 2021-09-21
?
千巷猫影

TA贡献1829条经验 获得超7个赞

需要注意的是,array在 ruby 和arraygo 中是不同的数据结构。Go 数组是不可变的,而 rubyarray是。Goslice是与 ruby 更相似的数据结构array。但是,slices正如 icza 的回答中指出的那样,您不能在 go 中使用as 键。

所以要回答你的问题:

在 Golang 中看起来如何?

这是不可能的,你不能有一个映射dynamic arraysstringsgo的字典。但是,您可以转换slicesarrays并将它们用作键,正如 icza 所解释的那样。


查看完整回答
反对 回复 2021-09-21
  • 2 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信