去相当于Python的词典

时间:2016-10-26 04:54:49

标签: go

我正在寻找一种方法来使用Go为每个键存储多个值(就像我们可以在python中使用字典一样)。 有没有办法在Go中实现这一目标?

2 个答案:

答案 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