如何在Go中创建一个map [string] [2] int?

时间:2016-07-20 09:35:19

标签: arrays dictionary go

我想在Go中创建一个map[string][2]int。我在游乐场试过this,但是我遇到了错误。我该如何解决这个问题?

fmt.Println("Hello, playground")
m:= make(map [string][2]int)
m["hi"]={2,3}
m["heello"][1]=1
m["hi"][0]=m["hi"][0]+1
m["h"][1]=m["h"][1]+1
fmt.Println(m)

3 个答案:

答案 0 :(得分:0)

您的地图初始化是正确的。 您只需要明确声明地图元素的类型:

m:= make(map [string][2]int)
m["test"] = [2]int{1,3}
fmt.Println(m)

如果您不需要访问底层元素,则此方法有效。

如果你需要这个,你必须使用指针:

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello, playground")
    m := make(map[string]*[2]int)
    m["hi"] = &[2]int{2, 3}
    m["heello"] = &[2]int{0, 1}
    m["hi"][0] = m["hi"][0] + 1
    // commented out. Initialize it first
    //m["h"][1]=m["h"][1]+1
    fmt.Println(m) // 2 address
    fmt.Println(m["hi"], m["heello"])
}

答案 1 :(得分:0)

如果希望能够为数组索引赋值,则需要有一个指向数组的指针映射。查看此代码(您需要在将它们用作数组之前启动所有映射键)。

package main

import (
    "fmt"
)

func Assign(m map[string]*[2]int, key string, index int, value int) {
    if _, ok := m[key]; !ok {
        m[key] = &[2]int{}
    }

    m[key][index] = value
}

func main() {
    fmt.Println("Hello, playground")

    m := make(map[string]*[2]int)

    m["hi"] = &[2]int{2, 3}
    m["h"] = &[2]int{4, 5}

    //existing key
    Assign(m, "h", 1, 4)
    //new key
    Assign(m, "howdy", 1, 3)

    fmt.Println(m["hi"])
    fmt.Println(m["h"])
    fmt.Println(m["howdy"])

}

答案 2 :(得分:0)

请参阅此问题:https://github.com/golang/go/issues/3117

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello, playground")
    m := make(map[string][2]int)

    m["hi"] = [2]int{2, 3}

    m["heello"] = [2]int{}

    var tmp = m["heello"]
    tmp[1] = 1
    m["heello"] = tmp

    fmt.Println(m)
}