笔记整理全部整理于文档库页面 点我前往

映射 (Map)

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

定义map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func main(){
// 没有分配空间 需要手动用 make 分配
cities := make(map[string]string)
cities["1"] = "BeiJing"
cities["2"] = "Shanghai"
cities["3"] = "TianJin"

fmt.Println(cities)

// 系统已经分配
seasons := map[string]string{
"1~4" : "Spring",
"5~7" : "Summer",
"8~10" : "Autumn",
"11~12" : "Winter",
}
fmt.Println(seasons)
}

MapCurd

增加/修改

1
2
3
4
5
6
7
8
9
10
11
func main(){
seasons := map[string]string{
"1~4" : "Spring",
"5~7" : "Summer",
"8~10" : "Autumn",
"11~12" : "Winter",
}
seasons["99-88"] = "wow" //新增
seasons["1~4"] = "tot" //修改
// 如果删除了不存在的元素,函数不会操作,也不会报错
}

删除

无法一次性清空map所有的key,可以采用遍历的方式逐个清楚,或者为同名map分配新空间,老空间被回收机制删除。(GC)

1
2
3
4
5
6
7
8
9
10
func main(){
seasons := map[string]string{
"1~4" : "Spring",
"5~7" : "Summer",
"8~10" : "Autumn",
"11~12" : "Winter",
}
delete(seasons, "1~4")
// 如果删除了不存在的元素,函数不会操作,也不会报错
}

查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main(){
seasons := map[string]string{
"1~4" : "Spring",
"5~7" : "Summer",
"8~10" : "Autumn",
"11~12" : "Winter",
}
val, isfind := seasons["1-4"]
if isfind{
fmt.Println(val)
}else{
fmt.Println("None")
}
}

遍历

1
2
3
4
5
6
7
8
9
10
11
func main(){
seasons := map[string]string{
"1~4" : "Spring",
"5~7" : "Summer",
"8~10" : "Autumn",
"11~12" : "Winter",
}
for month := range seasons{
fmt.Println(month, seasons[month])
}
}

排序

Golang遍历Map是以无序的形式输出的,所以我们需要对其进行排序处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func main(){
cities := map[string]string{
cities["1"] = "BeiJing"
cities["2"] = "Shanghai"
cities["3"] = "TianJin"
}
fmt.Println(cities) //无序排列

var key []string
// 遍历 map 至 key 切片
for k := range cities {
key = append(key, k)
}
// 对key进行排列
sort.Strings(key)
// 按照Key的顺序从新进行遍历
for _, k := range key{
fmt.Println(k, cities[k])
}
}

Map Slice

1
2
3
4
5
6
7
8
9
10
11
12
var students []map[string]string
students = make([]map[string]string, 0)

// 利用切片的特性 动态增加map
Tom := map[string]string{
"name" : "Tom",
"gender" : "male",
}

students = append(students,Tom)

fmt.Println(students)