map
简介
map类型需要保持key的唯一性, 因此必须支持“==”和“!=”两种比较操作符.
func map slice 只支持与nil比较, 不支持变量比较,因此不可以作为map的key.
声明和初始化
不满足 “零值可用”
var m map[string]int // m = nil
m["key"] = 1 //出错
复合字面值
m := map[int]string{}
m := map[int]string{1:"一"}
make
m1 := make(map[int]string)
m2 := make(map[int]string, 8)
可以指定初始化长度,虽然没啥用,因为键值对超过数量,可以自动扩容.
基本操作
操作一: 插入新键值对
m := make(map[int]string)
m[1] = "one"
操作二: 获取键值对的数量
m := map[string]int {
"key" : 1,
"key" : 2,
}
len(m) //2
操作三: 查找和数据读取
查找一个不存在的键会返回零值
m := make(map[string]int)
v := m["key1"]
使用comma ok对map进行键值查找
if v, ok := m["key1"]; ok {
}
操作四: 删除数据
m := map[string] int { "key1" : 1, "key2" : 2 } delete(m, "key1")
操作五: 遍历map当中的数据
map 是无序的
for k,v := range m {
fmt.Println("[%d, %d]", k, v)
}
map变量的传递开销
map也是引用类型, 作为参数传递的时候, 传递一个描述符. 函数内部做的修改会影响外部.
map内部实现
其他问题
不可以&m["key1"]对map元素取地址
不支持并发读写