目录
文档地址:https://studygolang.com/pkgdoc
- 是一个无序的基于key-value的数据类型
- 最好要估算好map的容量,避免程序运行过程中在动态扩容
- map中取值时,可以返回两个参数,第二个参数表示是否能取到
- 删除元素:如果元素为空,或者不存在该key,则不进行操作
- 切片和map在使用前一定要初始化,要不然会报空指针
var v1 map[string]int
// 还没有初始化,是一个nil
fmt.Println(v1 == nil)
m1 := make(map[string]int, 10)
m1["age"] = 18
fmt.Println(m1)
// ok是否取到值,取到为true,取不到为false
v, ok := m1["wangli"]
if ok {
fmt.Println(v)
}
// map的遍历
for k, v := range m1 {
fmt.Printf("k:%v,v:%v\n", k, v)
}
// map遍历key
for k := range m1 {
fmt.Printf("k:%v\n", k)
}
//删除存在的key
delete(m1, "wangli")
delete(m1, "name")
fmt.Println(m1)
map按照指定顺序遍历
- 先将key取出来
- 对key进行排序,然后在遍历
package main
import (
"fmt"
"math/rand"
"sort"
)
func main() {
var scoreMap = make(map[string]int, 200)
for i := 0; i < 100; i++ {
key := fmt.Sprintf("stu:%02d", i)
value := rand.Intn(100)
scoreMap[key] = value
}
fmt.Println(scoreMap)
var keys = make([]string, 0, 200)
// 取map中所有的key
for key := range scoreMap {
keys = append(keys, key)
}
// 切片排序
sort.Strings(keys)
for _, key := range keys {
fmt.Println(scoreMap[key])
}
}
元素为map类型的切片
package main
import "fmt"
//map与slice的组合
func main() {
var s1 = make([]map[int]string, 10, 10) // 此次make初始化的是切片,内部的map并没有初始化
s1[0] = make(map[int]string, 1)
s1[0][100] = "test"
fmt.Println(s1)
}
输出:[map[100:test] map[] map[] map[] map[] map[] map[] map[] map[] map[]]
值为切片类型的map
var m1 = make(map[string][]int, 10)
m1["beijing"] = []int{1, 2, 3}
fmt.Println(m1)