Map

  1. 使用 range 遍历 key, 或者遍历 key,value 对
  2. 不保证遍历顺序,如需顺序,需要手动对 key 进行排序
  3. 可以使用 len 来获取元素的个数
  4. 除了 slice,map,function 的内建类型外,其余的内建类型都可以做为key
  5. Struct 类型不包含上述字段,也可以作为 key

定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package main

import "fmt"

func main() {
// 使用 make 定义 map
var mapVariables = make(map[string]string)
mapVariables["name"] = "zhangsan"
fmt.Println(mapVariables) // map[name:zhangsan]

// 定义的时候同时赋值
var mapVariables2 = map[string]string{
"name": "lisi",
}
fmt.Println(mapVariables2) // map[name:lisi]

// 使用 := 定义 map
mapVariables3 := make(map[string]string)
mapVariables3["name"] = "wangwu"
fmt.Println(mapVariables3) // map[name:wangwu]
}
1
2
3
4
5
6
7
8
9
10
11
12
// map[Key]Value
// map[Key1]map[Key2]Value

m := map[string]string{
"name": "name",
"value": "value",
}

m2 := make(map[string]int) // empty map
var m3 map[string]int // nil

fmt.Println(m, m2, m3)

遍历

1
2
3
4
// map 的遍历
for k, v:=range m {
fmt.Println(k, v)
}

有序遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main

import (
"fmt"
"sort"
)

func main() {
// map 的有序输出
mapVariables3 := make(map[string]string)
mapVariables3["name"] = "wangwu"
mapVariables3["age"] = "11"
mapVariables3["city"] = "wuhan"

// 获取到 map 的key
var mapKey []string
for key:= range mapVariables3{
mapKey = append(mapKey, key)
}
// 对 key 进行排序
sort.Strings(mapKey)

// 根据排序好的 key 输出 map
for i:=0;i < len(mapKey); i++{
fmt.Printf("key:%s, value:%s\n",mapKey[i],mapVariables3[mapKey[i]])
/**
key:age, value:11
key:city, value:wuhan
key:name, value:wangwu
*/
}
}

获取值

1
2
3
// 获取值
fmt.Println(m["value"]) // value
fmt.Println(m["value1111"]) // 没有这个key的时候,不报错,值是空的

判断 key 是否存在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 判断 key 有没有在 map 中
value, ok := m["value1111"]
if ok {
fmt.Println(value)
}else {
fmt.Print("Key 没有在 map 中")
}

// 上面的判断也可以这样写
if value, ok := m["value1111"]; ok{
fmt.Println(value)
}else{
fmt.Print("Key 没有在 map 中")
}

删除

1
2
3
4
// delete
fmt.Println(m) // map[name:name value:value]
delete(m, "name")
fmt.Println(m) // map[value:value]