Skip to content

Latest commit

 

History

History
64 lines (53 loc) · 1.74 KB

07.map.md

File metadata and controls

64 lines (53 loc) · 1.74 KB

map

-类似其他语言中的哈希表或者字典,以 key-value 形式存储数据
-key 必须是支持 ==!= 比较运算的类型,不可以是函数,mapslice
-map 查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍
-map 使用 make() 创建,支持 := 这中简写方式

-make([keyType]valueType, cap) , cap 表示容量,可省略
-超出容量时会自动扩容,但尽量提供一个合理的初始值
-使用 len() 获取元素个数

-键值不存在时自动添加,使用 delete() 删除某键值对
-使用 for rangemapslice 进行迭代操作

//创建
var m map[int]string
m = map[int]string{}

//使用 make() 创建
m := make(map[int]string)

//存入键值对
m[1] = "ok"

//删除键值对
delete(m, 1)

fmt.Println(m)

//map多层嵌套时每一层都需要初始化
var a map[int]map[int]string
a = make(map[int]map[int]string)
a[1] = make(map[int]string)
a[1][1] = "hello"
//第一个参数 s 获取 a[1][1] 的值, 第二个参数 ok 获取 a[1][1] 是否存在的bool值
s, ok := a[1][1]
fmt.Println(s)
fmt.Println(ok)

//创建一个切片a包含5个map, 并在迭代中初始化与插入键值对
a := make([]map[int]string, 5)
for i := range a {
	a[i] = make(map[int]string)
	a[i][1] = "OK"
}
fmt.Println(a)

//使用 sort 包排序
m := map[int]string{1:"a", 2:"b", 3:"c"}
s := make([]int, len(m))
i := 0
for k, _ := range m {
	s[i] = k
	i++
}
sort.Ints(s)
fmt.Println(s)

//课后作业
m := map[int]string{1:"a", 2:"b", 3:"c"}
a := make(map[string]int)
for k, v := range m {
	a[v] = k
}
fmt.Println(a)