我想在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)
答案 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)
}