如何在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中如何看待它?
答案 0 :(得分:8)
Go中的数组类型(与切片不同)具有可比性,因此没有什么神奇之处:您可以像任何其他地图一样定义它:map[KeyType]ValueType
其中KeyType
将是[3]int
ValueType
将为string
。
必须为密钥类型的操作数完全定义comparison operators ==和!=;因此,键类型不能是函数,映射或切片。
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",
}
答案 1 :(得分:1)
应该注意的是,ruby中的array
和go中的array
是不同的数据结构。 Go数组不可变,而ruby array
是。 Go slice
与ruby array
的数据结构更相似。但是,正如icza的回答所指出的那样,你不能使用slices
作为关键。
所以回答你的问题:
在Golang中如何看待它?
这是不可能的,你不能拥有一个将dynamic arrays
映射到strings
的字典。但是,您可以将slices
转换为arrays
并将其用作密钥,icza将对其进行详细解释。