根据您在评论中的回复,我建议使用以下结构(尽管如果您只对单个值感兴趣,例如name切片中的每个项目,那么您可以使用map[int][]string{}
type Thing struct {
name string
age int
}
myMap := map[int][]Thing{}
Run Code Online (Sandbox Code Playgroud)
如果你想添加东西,那么你只需......
myMap[100] = append(myMap[100], Thing{"sberry": 37})
Run Code Online (Sandbox Code Playgroud)
或者,如果您想就地创建它:
myMap := map[int][]Thing{
100: []Thing{Thing{"sberry", 37}},
2: []Thing{Thing{"johndoe", 22}},
}
Run Code Online (Sandbox Code Playgroud)
编辑:根据注释添加“nameIn”函数作为演示:
func nameIn(things []Thing, name string) bool {
for _, thing := range things {
if thing.name == name {
return true
}
}
return false
}
if nameIn(myMap[100], "John") {
...
Run Code Online (Sandbox Code Playgroud)
如果切片确实很大并且速度很重要,那么您可以保留一个反向查找映射,就像map[string]int条目所在的位置一样John: 100,但是您很可能需要使用一些用户定义的函数来进行映射修改,以便它可以将反向查找更改为出色地。这也限制了您需要唯一的名称。
最有可能的是,它nameIn会工作得很好。
在 Go 中,键/值集合称为map. 你用它来创建它myMap := map[keyType]valType{}
通常类似于mapA := map[string]int{}. 如果您想为每个键存储多个值,可能类似于:
mapB := map[string][]string{}其中每个元素本身就是一个字符串切片。然后,您可以使用以下内容添加成员:
mapB["foo"] = append(mapB["foo"], "fizzbuzz")
如需精彩阅读,请参阅运行中的 Go 地图