Go相当于Python';词典
我正在寻找一种使用Go为每个键存储多个值的方法(就像我们在python中使用dictionary一样)。Go相当于Python';词典,go,Go,我正在寻找一种使用Go为每个键存储多个值的方法(就像我们在python中使用dictionary一样)。 是否有一种方法可以在Go中实现这一点?在Go中,键/值集合称为映射。您可以使用myMap:=map[keyType]valType{} 通常类似于mapA:=map[string]int{}。如果要为每个键存储多个值,可能类似于: mapB:=map[string][]string{}其中每个元素本身就是字符串的一部分。然后,您可以添加具有以下内容的成员: mapB[“foo”]=appen
是否有一种方法可以在Go中实现这一点?在Go中,键/值集合称为
映射。您可以使用myMap:=map[keyType]valType{}
通常类似于mapA:=map[string]int{}
。如果要为每个键存储多个值,可能类似于:
mapB:=map[string][]string{}
其中每个元素本身就是字符串的一部分。然后,您可以添加具有以下内容的成员:
mapB[“foo”]=append(mapB[“foo”],“fizzbuzz”)
要想获得更好的阅读效果,请参见,根据您在评论中的回答,我建议使用struct(尽管如果您只对切片中的每个项目感兴趣,例如name
,那么您可以使用map[int][]string{}
type Thing struct {
name string
age int
}
myMap := map[int][]Thing{}
如果你想添加一些东西,那么你只要做
myMap[100] = append(myMap[100], Thing{"sberry": 37})
或者,如果要就地创建,请执行以下操作:
myMap := map[int][]Thing{
100: []Thing{Thing{"sberry", 37}},
2: []Thing{Thing{"johndoe", 22}},
}
编辑:根据评论添加“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") {
...
如果切片非常大,并且考虑速度,那么您可以保留一个反向查找映射,如map[string]int
其中一个条目将是John:100
,但您很可能需要使用一些用户定义的函数来修改地图,以便它也可以更改反向查找。这还通过要求唯一的名称来限制您
最有可能的是nameIn
可以正常工作。您试图存储什么类型的值?键类型:是一个整数,值是一个类似“map[name:1954]”的数组。您提出了一个很好的观点。我想知道“multiple values”的意思是“多个字段”还是map[int]*Thing
就足够了。nvm.再次阅读注释。看起来他可能想要一个结构片。也许。谢谢。我正在处理状态非常糟糕的遗留数据。所以我在这里尝试做的是:myMap[100]={map[“john”:42],map[“Alice”:32],map[“Fred”:19]}。我处理这些数据的方式很奇怪。map
作为您的值实际上没有意义,因为您永远不知道键,即使只有一个条目,也需要迭代键、值对。结构在这里更有意义。'map[]“事情给我设置了障碍,让我无法访问约翰:42这样的数据。我有什么办法可以让自己的生活变得更好吗?如果我能做一些像‘约翰属于我的地图吗[100]”这样的事情,那将是非常理想的。谢谢。这很有用!”!