map是Go中的内置类型,它将一个值与一个键关联起来,可以使用响应的键检索值
Map是一种无序的键值对的集合,Map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值
一:注意事项
- map是无序的,每次打印出来的map都会不一样,必须通过key获取
- map的长度是不固定的,也就是和slice一样,也是一种引用类型
-
内置的len
image.png
二:获取
value,ok := map[key]
根据key获取对应的value,如果key存在,value就是对应的数据,ok为true,如果key不要存在,value就是值类型的默认值,ok为false
三: 删除
如果key存在,直接删除数据,如果key不存在,删除失败
package main
import "fmt"
func main() {
//1.创建map
//只是声明,没有初始化,nil,如果不初始化map,那么就会创建一个nil map,nil map不能用来存放键值对
var map1 map[int]string
var map2 = make(map [int] string)
var map3 = map[string] int {"Go":98,"Python":87,"java":79,"html":93}
fmt.Println("map1",map1)
fmt.Println("map2",map2)
fmt.Println("map3",map3)
// nil map
// 判断是否是nil
fmt.Println("map1是否是nil:",map1 == nil)
fmt.Println("map2是否是nil:",map2 == nil)
fmt.Println("map3是否是nil:",map3 == nil)
// 3.存储键值对到map中
// map[1]key = value
map2[1] = "hello"
map2[2] = "world"
map2[3] = "王二狗"
map2[4] = "rudy"
map2[5] = "好好好"
map2[6] = ""
// 获取数据
fmt.Println("map2[4]的值是:",map2[4])
fmt.Println("map2[40]的值是:",map2[40])
v1,ok := map1[40]
if ok {
fmt.Println("map1[40]对应的数值是:",v1)
} else {
fmt.Println("map1[40]操作的key不存在,获取到的是零值")
}
// 删除数据
delete(map2,3)
fmt.Println(map2)
}
//结果
map1 map[]
map2 map[]
map3 map[Go:98 Python:87 html:93 java:79]
map1是否是nil: true
map2是否是nil: false
map3是否是nil: false
map2[4]的值是: rudy
map2[40]的值是:
map1[40]操作的key不存在,获取到的是零值
map[1:hello 2:world 4:rudy 5:好好好 6:]
三、遍历Map
package main
import (
"fmt"
"sort"
)
func main() {
map1 := make(map [int] string )
map1[5] = "hello"
map1[6] = "world"
map1[7] = "王二狗"
map1[8] = "rudy"
map1[9] = "好好好"
for i,v := range map1 {
fmt.Println(i,v)
}
fmt.Println("--------------------")
for i:= 1;i<=len(map1);i++{
fmt.Println(i,"--->",map1[i])
}
/*
第二种方式
1.获取所有的key--》切片/数组
2.进行排序
3.遍历key --》map[key]
*/
keys := make([] int,0,len(map1)) //定义一个keys容量是map1的长度
fmt.Println("one_keys ",keys)
for k,_ := range map1{
keys = append(keys,k)
}
fmt.Println("for_keys: ",keys)
// 排序
sort.Ints(keys)
fmt.Println(keys)
// 遍历key
for _,key := range keys{
fmt.Println(key,map1[key])
}
}
网友评论