我正在寻找一种方法来使用Go为每个键存储多个值(就像我们可以在python中使用字典一样)。 有没有办法在Go中实现这一目标?
答案 0 :(得分:3)
根据你在评论中的回答,我建议使用一个结构(如果你只对切片中的每个项目只对name
这样的单个值感兴趣),那么你可以使用{{ 1}}
map[int][]string{}
如果您想添加内容,那么您只需...
type Thing struct {
name string
age int
}
myMap := map[int][]Thing{}
或者如果你想在适当的位置创建它:
myMap[100] = append(myMap[100], Thing{"sberry": 37})
编辑:根据评论添加“nameIn”函数作为演示:
myMap := map[int][]Thing{
100: []Thing{Thing{"sberry", 37}},
2: []Thing{Thing{"johndoe", 22}},
}
如果切片非常大且速度很快,那么你可以保留一个反向查找映射,例如func nameIn(things []Thing, name string) bool {
for _, thing := range things {
if thing.name == name {
return true
}
}
return false
}
if nameIn(myMap[100], "John") {
...
,其中一个条目是map[string]int
,但你需要很可能使用一些用户定义的函数进行地图修改,以便它也可以更改反向查找。这也通过要求唯一名称来限制您。
John: 100
很可能会正常工作。
答案 1 :(得分:2)
在go中,键/值集合称为map
。您可以使用myMap := map[keyType]valType{}
通常类似于mapA := map[string]int{}
。如果要为每个键存储多个值,可能类似于:
mapB := map[string][]string{}
其中每个元素本身就是一个字符串片段。然后,您可以使用以下内容添加成员:
mapB["foo"] = append(mapB["foo"], "fizzbuzz")
如需精彩阅读,请参阅Go maps in action