定义
map是key-value的数据结构,即关联数组。
声明,初始化,make
-
var mapName map[key_dataType]value_dataType
-
key数据类型:
- int String float 指针 chan
- 数组、切片和结构体不能作为 key
-
value类型
-
初始化
- 声明是不会分配内存的,初始化需要 make ,分配内存后才能赋值和使用
- 示例1:
使用make(map[type]type,len,cap)
func shengming_1() { map_1 := make(map[string]string, 10) map_1["name"] = "王工" map_1["age"] = "30" map_1["sex"] = "男" fmt.Println(map_1) }- 示例2:
不使用make
func shengming_2() { map_2 := map[string]string{ "name": "王工", "age": "20", } map_2["sex"] = "男" fmt.Println(map_2) }
map的增删改查操作
- 增加和更新: mapName["key"] = "value"
- 删除: delete(mapName,key),若不包含这个元素,则不操作
- 查找:
if var_name, ok := map_2["name"]; ok {var_name为返回值,ok为bool值
func get_value() {
map_2 := map[string]string{
"name": "王工",
"age": "20",
}
if var_name, ok := map_2["name"]; ok {
fmt.Println(var_name)
} else {
fmt.Println("不存在这个元素")
}
}
遍历
- map 的遍历使用 for-range 的结构遍历
- 示例:
func bianli() {
map_1 := make(map[string]string, 10)
map_1["name"] = "王工"
map_1["age"] = "30"
map_1["sex"] = "男"
for k, v := range map_1 {
fmt.Println("key:", k, "===value:", v)
}
}
map切片
- 切片的数据类型是切片,则称之为map切片,map个数可以动态变化
- var slice_map []map[string]string
排序
- map默认是无序的,每次遍历,输出的结果是不同的
- sort包排序
其他补充
- Map是引用传值,函数接收一个map,修改后,会直接修改原来的map
- map达到容量上限后,会自动扩容,不会发生painc