定义
映射是一种内置类型
可以将键值对关联起来,可以通过key来获取value
类似于其他语言的集合
基本语法: var 变量名 map[key类型]value类型
1 2 3 4 5 6 7 8
| var a map[int]string
a = make(map[int]string,10)
a[11111] = "小明" fmt.Println(a)
|
key value的类型可以是 bool 数字 string channel管道
还可以是接口 结构体 数组 但是用的比较少
key通常为int string类型
value通常为 数字 string map 结构体
key不可以是slice map function
map的key-value是无序的
如果key重复了后赋值的会替换之前的value
map的三种创建方式
方式一
1 2
| var a map[int]string a = make(map[int]string,10)
|
方式二
1 2 3
| a := make(map[int]string) a[11111] = "小明" fmt.Println(a)
|
方式三
1 2 3 4
| a := map[int]string{ 1111 : "小明", } fmt.Println(a)
|
对map进行的操作
增删改查
增加和更新就是直接赋值
清空操作
没有一键清空方式 可以循环删除
或者重新make一个新的让原来的变成垃圾,go会自动回收
1 2 3 4 5 6 7 8 9 10 11 12 13
| a := make(map[int]string) a[1] = "aaaaa" a[1] = "bbbbb" fmt.Println(a)
value,flag := a[1] fmt.Println(value,flag)
delete(a,1) a = make(map[int]string)
|
获取长度
1 2 3
| a := make(map[int]string) a[111] = "张三" fmt.Println(len(a))
|
遍历
只支持for range操作
1 2 3 4 5 6 7 8 9 10
| a := make(map[int]string)
a[1] = "aaaaa" a[2] = "bbbbb" a[3] = "ccccc"
for k,v := range a{ fmt.Println(k,v) }
|
双层map的遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| a := make(map[string]map[int]string)
a["一班"] = make(map[int]string,2) a["一班"][101] = "小明" a["一班"][102] = "小籍" a["二班"] = make(map[int]string,2) a["二班"][201] = "小新" a["二班"][202] = "小张"
for k1,v1 := range a{ fmt.Println(k1,v1) for k2,v2 := range v1{ fmt.Println(k2,v2) } }
|