1 package main
2
3 import "fmt"
4
5 func main() {
6 /*
7 map:映射,是一种专门用于存储键值对的集合。属于引用类型
8
9 存储特点:
10 A:存储的是无序的键值对
11 B:键不能重复,并且和value值一一对应的。
12 map中的key不能重复,如果重复,那么新的value会覆盖原来的,程序不会报错。
13
14 语法结构:
15 1.创建map
16 var map1 map[key类型]value类型
17 nil map,无法直接使用
18
19 var map2 = make(map[key类型])value类型
20
21 var map3 = map[key类型]value类型{key:value,key:value,key:value...}
22
23 2.添加/修改
24 map[key]=value
25 如果key不存在,就是添加数据
26 如果key存在,就是修改数据
27
28 3.获取
29 map[key]-->value
30
31 value,ok := map[key]
32 根据key获取对应的value
33 如果key存在,value就是对应的数据,ok为true
34 如果key不存在,value就是值类型的默认值,ok为false
35
36 4.删除数据:
37 delete(map,key)
38 如果key存在,就可以直接删除
39 如果key不存在,删除失败
40
41 5.长度:
42 len()
43
44
45 每种数据类型:
46 int:0
47 float:0.0-->0
48 string:""
49 array:[00000]
50
51 slice:nil
52 map:nil
53
54 */
55
56 // 1.创建map
57 var map1 map[int]string // 没有初始化,nil
58 var map2 = make(map[int]string) // 创建,初始化
59 var map3 = map[string]int{"Go": 98, "Python": 87, "Java": 79, "Html": 93}
60 fmt.Println(map1) // map[]
61 fmt.Println(map2) // map[]
62 fmt.Println(map3) // map[Go:98 Html:93 Java:79 Python:87]
63
64 fmt.Println(map1 == nil) // true
65 fmt.Println(map2 == nil) // false
66 fmt.Println(map3 == nil) // false
67
68 // 2.nil map
69 if map1 == nil {
70 map1 = make(map[int]string)
71 fmt.Println(map1 == nil) // false
72 }
73
74 // 3.存储键值对到map中
75 // map1[key] = value
76 map1[1] = "hello" // 如果没有初始化,panic: assignment to entry in nil map
77 map1[2] = "world"
78 map1[3] = "memeda"
79 map1[4] = "王二狗"
80 map1[5] = "ruby"
81 map1[6] = "三胖思密达"
82 map1[7] = ""
83
84 // 4.获取数据,根据key获取对应的value值
85 // 根据key获取对应的value,如果key存在,获取数值,如果key不存在,获取的是value值类型的零值
86 fmt.Println(map1) // map[1:hello 2:world 3:memeda 4:王二狗 5:ruby 6:三胖思密达 7:]
87 fmt.Println(map1[4]) // 根据key为4,获取对应的value值 王二狗
88 fmt.Println(map1[40]) // ""
89
90 v1, ok := map1[40]
91 if ok {
92 fmt.Println("对应的数值是:", v1)
93 } else {
94 fmt.Println("操作的key不存在,获取到的是零值:", v1) // 操作的key不存在,获取到的是零值:
95 }
96
97 // 5.修改数据
98 fmt.Println(map1) // map[1:hello 2:world 3:memeda 4:王二狗 5:ruby 6:三胖思密达 7:]
99 map1[3] = "如花"
100 fmt.Println(map1) // map[1:hello 2:world 3:如花 4:王二狗 5:ruby 6:三胖思密达 7:]
101
102 // 6.删除数据
103 delete(map1, 3)
104 fmt.Println(map1) // map[1:hello 2:world 4:王二狗 5:ruby 6:三胖思密达 7:]
105 delete(map1, 30)
106 fmt.Println(map1) // map[1:hello 2:world 4:王二狗 5:ruby 6:三胖思密达 7:]
107
108 // 7.长度
109 fmt.Println(len(map1)) // 6
110
111 }