Go语言学习笔记——字典(五)

Map 是一种基于key-value的无序的键值对的集合。

  • Map是引用类型,必须初始化才能使用。
  • Map使用hash实现,所以它是无序的。
  • map的操作不是原子的,Map不是并非安全的,并发安全的Map可以使用sync标准包中的map。

声明

使用map关键字定义:

var map变量名 map[键的数据类型]值的数据类型
  • 如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对

使用内建函数make()定义:

make(map[键的数据类型]值的数据类型, [cap])
  • 其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。
  • 使用make函数可以指定容量,有效的减少内存分配的次数,从而提升性能。

初始化

先声明,后初始化

ageMap := make(map[string]int)
ageMap["小白"] = 21
ageMap["大白"] = 23
ageMap["小兔"] = 17

map[大白:23 小兔:17 小白:21]

声明时初始化

ageMap := map[string]int{
    "小白":21,
    "大白": 23,
    "小兔" : 17,
}

判断某个键是否存在

// 如果key存在ok为true,v为对应的值;不存在ok为false,v为值类型的零值
v, exist := ageMap["小兔"]
if exist {
	fmt.Println(v)
} else {
	fmt.Println("查无此人")
}

遍历

Map时for range来遍历。

遍历Map

for k, v := range ageMap {
	fmt.Println(k, v)
}

只遍历key

for k := range ageMap {
    fmt.Println(k)
}

只遍历value

for _, v := range ageMap {
	fmt.Println(v)
}

删除键

使用delete()内建函数从Map中删除一组键值对:

delete(map, key)
  • map:表示要删除键值对的map,key:表示要删除的键值对的键
  • 在map为nil的情况下,delete()不会报错,执行空操作。
  • 在对应的键不存在时,delete()不会报错,执行空操作。
ageMap := map[string]int{
    "小白": 21,
    "大白": 23,
    "小兔": 17,
}
delete(ageMap, "大白")

返回Map键值对的数量

len(ageMap)

修改

普通的修改直接赋值即可

ageMap := map[string]int{
    "小白": 21,
    "大白": 23,
    "小兔": 17,
}
ageMap["小兔"] = 20

修改map内某个元素的值时必须整体重新赋值

type user struct {
    name string
    age  int
}

ma := make(map[string]user)
user1 := user{
    name: "李梓涵",
    age:  20,
}
ma["一班班长"] = user1

// 错误写法
//ma["一班班长"].age = 21

// 正确写法
user1.age = 21
ma["一班班长"] = user1

排序

map是无需的,如果想对map进行排序,需要进行以下三步:

  1. 遍历map,将map的key值存入一个切片
  2. 对切片进行排序
  3. 遍历切片,输出对应的map的值
// 新建一个map
var map1 = make(map[int]int, 10)
map1[10] = 100
map1[1] = 13
map1[8] = 90
map1[4] = 56

// 新建一个切片
var keys []int
// 循环遍历map,将其键写入切片
for k, _ := range map1 {
	keys = append(keys, k)
}

// 对键进行排序
sort.Ints(keys)

// 使用切片排出的键的顺序对map进行遍历输出
for _, k := range keys {
	fmt.Printf("map1[%v]=%v\n", k, map1[k])
}

参考资料:https://blog.csdn.net/zheyuan_xing/article/details/99362164

上一篇:Go入门(9)——字典


下一篇:2021-07-29