2.4 map
Map 是一种无序的键值对的集合,一个key=>value的hash结构
声明:
var map1 map[keytype]valuetype
示例:
var mapLit map[string]int
未初始化的 map 的值是 nil
初始化
m = map[string]int{}
或
m=make(map[string]int)
声明和初始化简写如下
m := map[string]int{“one”: 1, “two”: 2}
赋值
var m map[string]int
m = map[string]int{"one": 1, "two": 2}
m["d"] = 2
fmt.Println(m)
多维map
m := map[string]map[string]int{}
d := map[string]int{}
d["b"] = 23
m["a"] = d
fmt.Println(m)
删除单个元素
var m map[string]int
m = map[string]int{"one": 1, "two": 2}
fmt.Println(m)
delete(m, "one") //删除key为 one
fmt.Println(m, len(m))
删除整个map元素
var m map[string]int
m = map[string]int{"one": 1, "two": 2}
m = nil//清空map 元素
fmt.Println(m, len(m))
判断key存不存在
var m map[string]int
m = map[string]int{"one": 1, "two": 2}
if _,ok:=m["one"];!ok{
fmt.Println("The key does not exist")
}
比较两个map
package main
import (
"fmt"
"reflect"
)
func main() {
m1 := map[string]int{"a": 1, "b": 2, "c": 3}
m2 := map[string]int{"a": 1, "c": 3, "b": 2}
//方法一
fmt.Println(reflect.DeepEqual(m1, m2))
//方法二
fmt.Println(cmpMap(m1, m2))
}
func cmpMap(m1, m2 map[string]int) bool {
if len(m1) == len(m2) {
for k1, v1 := range m1 {
if v2, ok := m2[k1]; ok {
if v1 != v2 {
return false
}
} else {
return false
}
}
return true
}
return false
}
其中方法一用到了反射,效率相对比较低,相差大约10倍。