GO语言MAP
Map初始化
func TestInitMap(t *testing.T) {
m1 := map[string]int{"a": 1, "b": 2, "c": 3}
t.Log(m1["a"])
t.Logf("m1 len=%d", len(m1))
m2 := map[string]string{}
//key不存在会赋默认值
t.Log(m2["a"])
t.Logf("m2 len=%d", len(m2))
m3 := make(map[string]int, 10)
m3["d"] = 1111
t.Logf("m3 len=%d", len(m3))
}
未初始化map不能赋值
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
var Asset map[string] Vertex
Asset["abc"] = vertex
fmt.Println(Asset["abc"])
}
编译时报错:panic: assignment to entry in nil map
正常的示例
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
var Asset map[string] Vertex
Asset = make(map[string] Vertex)
Asset["abc"] = vertex
fmt.Println(Asset["abc"])
}
map的增删改查
package main
import "fmt"
func main() {
m := make(map[string]int)
m["Answer"] = 42 //初始化
fmt.Println("The value:", m["Answer"])
m["Answer"] = 48 //修改值
fmt.Println("The value:", m["Answer"])
delete(m, "Answer") //删除值
fmt.Println("The value:", m["Answer"])
if m["Answer"] == 0 {
fmt.Println("不存在的key") //不能存在的key的值为0
}
v, ok := m["Answer"] //通过双赋值检测某个键存在,如果 key 在 m 中, ok 为 true。否则, ok 为 false,并且 elem 是 map 的元素类型的零值。
fmt.Println("The value:", v, "Present?", ok)
}
map对于获取不存在的key的Value值时,不是nil,而是赋默认值。判断map中是否存在KEY的方法如下:
func TestMapKey(t *testing.T) {
m1 := map[string]int{"a": 1, "b": 2, "c": 3}
if value, ok := m1["d"]; ok {
t.Logf("Key 'a' value is %d", value)
} else {
t.Log("Key 'a' is not existing")
}
}
map实现工厂模式
func TestFuncValue(t *testing.T) {
mapf := map[string]func(op int) int{}
mapf["a"] = func(op int) int { return op }
mapf["b"] = func(op int) int { return op * op }
mapf["c"] = func(op int) int { return op * op * op }
t.Log(mapf["a"](2), mapf["b"](2), mapf["c"](2))
}
还没有评论,来说两句吧...