Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go相当于Python';词典_Go - Fatal编程技术网

Go相当于Python';词典

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为每个键存储多个值的方法(就像我们在python中使用dictionary一样)。
是否有一种方法可以在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]”这样的事情,那将是非常理想的。谢谢。这很有用!”!