map
2022-03-12 大约 2 分钟
映射(map),Go语言中内置的一种类型,它将键值对相关联,我们可以通过Key来获取对应的值value,类似其它语言的集合
# 基本语法
var 变量名称 map[keytype]valuetype
1
map的特点:
- map集合在使用前一定要make。
- map的key-value是无序的。
相关信息
- key,value的类型:bool、数字、string、指针、channel、还可以是只包含前面几个类型的接口、结构体、数组。
- key通常为Int、string类型、value通常为数字(整型、浮点数)、string、map、结构体
- key: slice、map、function不可以,如果重复,后一个的value会替换前一个value。
- make函数的第二个参数size可以省略,默认就分配一个内存。
func main() {
// 定义map变量
var a map[int]string
// 只声明map内存是没有分配空间
// 必须通过make函数进行初始化,才会分配空间
a = make(map[int]string, 10) // mao可以存放10个键值对
// 将键值对存入 map中;
a[2022] = "001"
a[2023] = "2023"
fmt.Println(a) // map[2022:001 2023:2023]
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 创建方式
func main() {
// 方式一
var a map[int]string
a = make(map[int]string, 10)
// 方式二
b := make(map[int]string)
b[123] = "123"
b[234] = "234"
fmt.Println(b) // map[123:123 234:234]
// 方式三
c := map[int]string{
123: "123",
234: "234",
}
fmt.Println(c) // map[123:123 234:234]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# map操作
# 新增/更新
func main() {
b := make(map[int]string)
b[222] = "222"
b[222] = "333"
fmt.Println(b) // map[222:333]
}
1
2
3
4
5
6
2
3
4
5
6
如果key还没有就是增加,如果key存在就是修改。
# 删除
func main() {
b := make(map[int]string)
b[111] = "222"
b[222] = "333"
fmt.Println(b) // map[111:222 222:333]
delete(b, 222)
fmt.Println(b) // map[111:222]
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
delete是一个内置函数,如果key存在就删除key-value,如果key不存在,不做操作,但是也不会报错。
# 清空
- 目前还没有一个专门的一个方法,用来删除所有的key,你可以选额遍历然后逐个删除。
- 可以重新创建一个新的map。
# 查找
func main() {
b := make(map[int]string)
b[111] = "222"
b[222] = "333"
value, bool := b[222]
fmt.Println(value, bool) // 333 true
}
1
2
3
4
5
6
7
2
3
4
5
6
7
value为返回的value,bool为是否返回。
# 获取长度
func main() {
b := make(map[int]string)
b[111] = "222"
b[222] = "333"
fmt.Println(len(b)) // 2
}
1
2
3
4
5
6
2
3
4
5
6
# 遍历
func main() {
b := make(map[int]string)
b[111] = "222"
b[222] = "333"
for key, value := range b {
fmt.Println(key, value)
}
}
// 打印结果
111 222
222 333
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
注意
map只能使用for range遍历。