Golang Map
1. map 的定义和初始化
- Map 是 go 内置的数据结构,是一种无序的键值对的集合,可以通过 key 快速找到 value 的值
- Map 必须初始化才能使用,否则报错
定义 Map
var 变量名 map[key的数据类型] value的数据类型
创建 map
package main
import "fmt"
func main() {
// 1. 创建空map
var m1 map[string]int
fmt.Println(m1 == nil)
fmt.Println(m1)
// 2. :=
m2 := map[string]int{}
fmt.Println(m2)
m3 := make(map[string]int)
fmt.Println(m3)
// 3. 指定长度make
m4 := make(map[string]int, 10)
fmt.Println(m4)
}
初始化 map
package main
import "fmt"
func main() {
// 1. 定义并初始化
var m1 map[int]string = map[int]string{1: "hello", 2:"world"}
fmt.Println(m1)
// 2. 自动推导
m2 := map[int]string{1: "world", 2: "hello"}
fmt.Println(m2)
}
2. 键值操作
package main
import "fmt"
func main() {
m1 := map[int]string{1: "a", 2: "b"}
// 修改
fmt.Println(m1)
m1[1] = "abc"
fmt.Println(m1)
// 增加
m1[3] = "aaa"
m1[5] = "bbb"
fmt.Println(m1)
// 删除
delete(m1, 1)
fmt.Println(m1)
}
3. 遍历
package main
import "fmt"
func main() {
m := map[int]string{1: "a", 2: "b", 3: "c", 5: "d"}
for k, v := range m {
fmt.Printf("key: %d, value: %s\n", k, v)
}
}
4. 其他操作
查找某个键是否存在
package main
import "fmt"
func main() {
m := map[int]string{1: "a", 2: "b", 3: "c", 5: "d"}
v, ok := m[1]
if ok {
fmt.Println("指定key存在", v)
} else {
fmt.Println("指定key不存在", v)
}
}
对无序的 map 进行排序
package main
import (
"fmt"
"sort"
)
func main() {
m := map[int]string{1: "a", 3: "c", 2: "b", 5: "d"}
// 将map中所有的key存储到一个切片中
var allKey []int
for k, _ := range m {
allKey = append(allKey, k)
}
// 对切片进行排序
sort.Ints(allKey)
// 通过排序好的切片从map中取有序的数值
for _, k :=range allKey {
fmt.Printf("key: %d, value: %s\n", k, m[k])
}
}
map 是引用类型
package main
import "fmt"
// 函数内修改
func modify(m map[int]string) {
m[105] = "abc"
}
func main() {
m := make(map[int]string)
m[101] = "a"
m[102] = "b"
m[105] = "c"
fmt.Println("m", m)
// 赋值给其他
b := m
b[101] = "123"
fmt.Println("b", b)
fmt.Println("m", m)
modify(m)
fmt.Println("m", m)
}
map 类型的切片初始化
package main
import "fmt"
func main() {
// map类型的切片
sm := []map[int]string{}
// 初始化一个slice的map值
ss := make(map[int]string)
// 将map类型append到切片中
sm = append(sm, ss)
fmt.Println(sm)
}
值为切片类型的 map
package main
import "fmt"
func main() {
// 定义一个map值为切片类型的map
ms := make(map[int][]int)
// 初始化map值为切片类型的值
ms[0] = make([]int,5)
fmt.Println(ms)
}