我怎么能写一个地图数组[golang]

时间:2014-04-14 17:48:03

标签: arrays data-structures go

我有一张地图,其中包含一系列地图值。

示例:

 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
    }
}

编辑:切片值(“硬币”,“注释”等)可以重复,这就是我需要使用索引[]的原因。

1 个答案:

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