我有一张地图,其中包含一系列地图值。
示例:
thisMap["coins"][0] = aMap["random":"something"]
thisMap["notes"][1] = aMap["not-random":"something else"]
thisMap["coins"][2] = aMap["not-random":"something else"]
我无法弄清楚如何执行此操作,因为go
似乎只允许在处理maps [name][value] = value
时在一个级别设置数据。
到目前为止,我的代码失败了
package main
func main() {
something := []string{"coins", "notes", "gold?", "coins", "notes"}
thisMap := make(map[string][]map[string]int)
for k, v := range something {
aMap := map[string]string{
"random": "something",
}
thisMap[v] = [k]aMap
}
}
编辑:切片值(“硬币”,“注释”等)可以重复,这就是我需要使用索引[]
的原因。
答案 0 :(得分:11)
工作示例(click to play):
something := []string{"coins", "notes", "gold?"}
thisMap := make(map[string][]map[string]int)
for _, v := range something {
aMap := map[string]int{
"random": 12,
}
thisMap[v] = append(thisMap[v], aMap)
}
在迭代新创建的thisMap
时,您需要为新值aMap
腾出空间。内置函数append
在使用切片时为您执行此操作。它腾出空间并将值附加到切片上。
如果您使用的复杂数据类型无法像切片一样轻松初始化,则首先必须检查密钥是否已在地图中,如果不是,则初始化数据类型。检查地图元素已记录here。地图示例(click to play):
thisMap := make(map[string]map[string]int)
for _, v := range something {
if _, ok := thisMap[v]; !ok {
thisMap[v] = make(map[string]int)
}
thisMap[v]["random"] = 12
}