Go语言map集合

1. map介绍

map是一种无序的键值对集合。map最重要的一点就是通过key来快速检索数据,key类似索引,指向数据的值。

map是一种集合,所以我们可以像迭代数组和切片那样去迭代它。不过,map是无序的,我们无法决定它的返回数据,这是因为map是使用hash表来实现的

基本语法

1
2
3
4
5
6
7
8
9
10
11
//声明变量
var 变量名 map[keytype]valuetype

//使用变量
//注意⚠️:声明是不会分配内存的,初始化需要make,分配内存之后才能赋值和使用。
//备注:如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对
变量名 = make(map[keytype]valuetype)


//类型推导
变量名 := make(map[keytype]valuetype)

1.1 实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import "fmt"

func main() {
var a map[string]string
//在使用map前,需要先make,make的作用就是给map分配数据
a = make(map[string]string, 10) //初始的值,还可以动态的增长
a["num1"] = "刘备"
a["num2"] = "关羽"
a["num3"] = "张飞"
fmt.Println(a)
}

/*
map[num1:刘备 num2:关羽 num3:张飞]
*/

2. map遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import "fmt"

func main() {
cities := make(map[string]string)
cities["no1"] = "北京"
cities["no2"] = "上海"
cities["no3"] = "广州"
for k, v := range cities {
fmt.Printf("k=%v,v=%v\n", k, v)
}
}

/*
k=no2,v=上海
k=no3,v=广州
k=no1,v=北京
*/

3. map增删改查

3.1 map的增加和更新

1
map["key"] = value //如果 key 没有,就是增加,如果 key 存在就是修改

3.2 map的删除

1
2
3
4
delete(map"key") 


delete 是一个内置函数,如果 key 存在,就删除该 key-value,如果 key 不存在,不操作,但是也不会报错。如果我们要删除 map 的所有 key ,没有一个专门的方法一次删除,可以遍历一下 key, 逐个删除或者 map = make(...),make 一个新的,让原来的成为垃圾,被 gc 回收。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package main

import "fmt"

func main() {
cities := make(map[string]string)
cities["no1"] = "北京"
cities["no2"] = "上海"
cities["no3"] = "广州"
fmt.Println(cities)

//由于no3这个key已经存在,因此下面的这句话就是修改
cities["no3"] = "广州-改"
fmt.Println(cities)

//演示删除
delete(cities, "no1")
fmt.Println(cities)

//当delete指定的key不存在的时候,删除不会操作,也不会进行报错
delete(cities, "no4")
fmt.Println(cities)

//一次性删除所有的key
//1. 遍历所有的key
//2. 直接make一个新的空间
cities = make(map[string]string)
fmt.Println(cities)
}


/*
map[no1:北京 no2:上海 no3:广州]
map[no1:北京 no2:上海 no3:广州-改]
map[no2:上海 no3:广州-改]
map[no2:上海 no3:广州-改]
map[]
*/

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!