九、map映射
导语
是go语言中内置的一种类型,与键值对相关联。
key,value的类型:bool、数字、指针、string、channel、还可以是只包含前几个类型的接口、数组、结构体
key通常为int、string类型,value通常为int、float、string、map、结构体类型
对key来说,slice、结构体、map不可以
map代码
map在使用前一定要make
map的key-value是无序的
key不可以重复,如果重复,后面的value会替换前一个value
value是可以重复的
make函数第二个参数size可以省略,默认分配一个内存
package main
import "fmt"
func main() {
//方式1:
//定义一个map变量
var a map[int]string
//只声明map内存是没有分配空间的
//必须通过make函数进行初始化,才会分配空间
a = make(map[int]string, 10) //map可以存放10个键值对
//将键值对放入map中
a[202222000541] = "qx"
a[202222000542] = "ls"
fmt.Println(a)
fmt.Println("---------------")
//方式2:
b := make(map[int]string)
b[202222000541] = "qx"
b[202222000542] = "ld"
fmt.Println(b)
fmt.Println("-----------------")
//方式3:
c := map[int]string{
202222000541: "qx",
202222000542: "sf",
}
fmt.Println(c)
}
输出:
map增删改查
package main
import "fmt"
func main() {
//定义map
a := make(map[int]string, 2)
//增加
a[202222000541] = "qx"
a[202222000542] = "ss"
fmt.Println(a)
fmt.Println("------------")
//修改
a[202222000541] = "gj"
fmt.Println(a)
fmt.Println("-------------")
//删除
delete(a, 202222000541)
fmt.Println(a)
fmt.Println("-----------------")
//清空
//1.循环遍历删除
//2.make一个新空间,使老空间被回收
b := make(map[int]int)
b[202222000541] = 22
b[202222000542] = 23
fmt.Println(b)
//查找,若查找的键不在map中,也不会报错,只会返回false
value, bool := b[202222000541]
fmt.Println(value)
fmt.Println(bool)
v, f := b[20222200076]
fmt.Println(v)
fmt.Println(f)
}
输出:
map长度
使用len函数,如fmt.Println(len(a))
map遍历:只有for-range遍历
import "fmt"
func main() {
a := make(map[int]string)
a[202222000541] = "覃系"
a[202222000542] = "是偶"
a[202222000543] = "好滴"
a[202222000544] = "萨伏"
fmt.Println(a)
fmt.Println("----------------")
//遍历
for k, v := range a {
fmt.Printf("学号为:%v 姓名为:%v\n", k, v)
}
}
输出:
加深难度:
package main
import (
"fmt"
)
func main() {
a := make(map[string]map[int]string)//map里面由map
a["班级1"] = make(map[int]string)
a["班级1"][202222000541] = "覃系"
a["班级1"][202222000542] = "亲生的"
a["班级2"] = make(map[int]string)
a["班级2"][202222000543] = "阿富汗"
a["班级2"][202222000545] = "是客服"
fmt.Println(a)
fmt.Println("----------------")
//遍历
for k, v := range a {
fmt.Println(k)
for k1, v1 := range v {
fmt.Printf("学号:%v 姓名:%v\n", k1, v1)
}
fmt.Println()
}
输出: