9、go的map
map引入
func main() {
// 定义map
var a map[int]string
// 只声明map内存是没有分配空间的,必须通过make函数进行初始化
a = make(map[int]string, 10) // 如果不指定大小,map会默认分配大小的
a[1] = "张三"
a[2] = "李四"
a[3] = "王五"
a[4] = "赵六"
a[5] = "张三"
a[2] = "王彪" // 会替换key为2的值,2-王彪
fmt.Println(a) // map[1:张三 2:王彪 3:王五 4:赵六 5:张三]
}
map其他的创建方式
func main() {
b := make(map[int]string)
b[1] = "张三"
b[2] = "李四"
fmt.Println(b) // map[1:张三 2:李四]
c := map[int]string{
1: "张三",
2: "李四",
}
c[3] = "王五"
fmt.Println(c) // map[1:张三 2:李四 3:王五]
}
map操作
func main() {
b := make(map[int]string)
// 增加
b[1] = "张三"
b[2] = "李四"
fmt.Println(b) // map[1:张三 2:李四]
// 修改
b[2] = "王五"
fmt.Println(b) // map[1:张三 2:王五]
// 删除,使用delete函数
delete(b, 2)
fmt.Println(b) // map[1:张三]
// 删除不存在的key,也不会报错
delete(b, 3)
fmt.Println(b) // map[1:张三]
// 查找,返回值,是否存在
value, flag := b[1]
fmt.Println(value) // 张三
fmt.Println(flag) // true
value2, flag2 := b[3]
fmt.Println(value2) // 空字符
fmt.Println(flag2) // false
// 遍历map
for k, v := range b {
fmt.Printf("key:%v value:%v \n", k, v)
}
// 打印:
// key:1 value:张三
// 增加点难度
a := make(map[string]map[int]string)
// 给这个map赋值
a["班级1"] = make(map[int]string, 3)
a["班级1"][1] = "张三"
a["班级1"][2] = "李四"
a["班级1"][3] = "王五"
a["班级2"] = make(map[int]string, 3)
a["班级2"][11] = "赵六"
a["班级2"][22] = "王彪"
a["班级2"][33] = "汪汪"
for k1, v1 := range a {
fmt.Println(k1)
for k2, v2 := range v1 {
fmt.Printf("学生学号:%v, 学生姓名:%v \n", k2, v2)
}
fmt.Println()
}
// 打印:
//班级2
//学生学号:11, 学生姓名:赵六
//学生学号:22, 学生姓名:王彪
//学生学号:33, 学生姓名:汪汪
//班级1
//学生学号:1, 学生姓名:张三
//学生学号:2, 学生姓名:李四
//学生学号:3, 学生姓名:王五
}
《三体》中有句话——弱小和无知不是生存的障碍,傲慢才是。
所以我们不要做一个小青蛙