golang基础小记(10)——map

map

基本概念

  • 语法:map[keyType]valueType
  • 用于存储键值对(key-value),键具有唯一性
  • 内部的键值对之间是无序的,和存入的顺序无关
  • 引用类型,声明后值为nil,此时无法添加键值对,需要先使用make()来分配内存(使用方式见基础小记(9)
  • 获取长度,即键值对个数:len(map)
  • 切片的元素类型可以是map,如[]map[string]string。此时要注意每个元素都需要用make()初始化
  • map的值可以是切片,如map[string][]string

添加键值对

声明时填充

m1 := map[string]int{
		"年龄": 25,
		"身高": 130,
	}
fmt.Println(m1["年龄"]) // 25

如果输出时选择的键不存在,则输出对应类型的零值。

直接添加

向上例的m1添加键值对:

m1["体重"] = 300
m1["身高"] = 150
fmt.Println(m1) // map[体重:300 年龄:25 身高:150]

可以看到,如果key在原map中不存在,就添加新的键值对;如果已存在,就改变对应的value

判断键是否存在

语法格式:value, ok := map[key]

  • value:如果键存在则返回对应值,否则返回对应类型的零值
  • ok:如果键存在则返回true,否则返回false

接上例:

v1, k1 := m1["身高"]
v2, k2 := m1["爱好"]
fmt.Println(v1, k1, v2, k2) // 150 true 0 false

遍历

语法格式:for k, v := range map {}
其中kv是键和值。示例请参考基础小记(4)代码中的第67行。
遍历过程是无序的,如果想要有序的遍历,可以将键保存在切片中,通过有序的遍历切片来遍历map。

删除键值对

语法格式:delete(map, key)
接上例:

fmt.Println(m1) // map[体重:300 年龄:25 身高:150]
delete(m1, "身高")
fmt.Println(m1) // map[体重:300 年龄:25]
delete(m1, "爱好")
fmt.Println(m1) // map[体重:300 年龄:25]

如果指定的键是nil或者不存在,delete不做任何操作,所以不会报错。
参考

猜你喜欢

转载自blog.csdn.net/m0_37710023/article/details/107574121