map映射操作

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

键必须是支持相等运算符 (“==”、”!=”) 类型, 如 number、string、 pointer、array、struct,以及对应的 interface。

值可以是任意类型,没有限制。

定义map映射

方法一,声明一个map映射

1
2
3
4
func main() {
var m map[string]float64
fmt.Printf("%#v", m)
}

方法二,先声明后初始化map映射

1
2
3
4
5
func main() {
var m map[int]string
m = map[int]string{1: "Go语言", 2: "Python", 3: "C#"}
fmt.Println(m) // map[1:Go语言 2:Python 3:C#]
}

方法三,通过make函数来定义map映射

1
2
3
4
func main() {
sources := make(map[string]int)
fmt.Println(sources) // map[]
}

方法四,通过:=声明并初始化map映射

1
2
3
4
func main() {
m := map[string]int{"张三": 60, "李四": 70, "王五": 80}
fmt.Println(m) //map[张三:60 李四:70 王五:80]
}

方法五,定义一个空接口map可以接收任意类型数据

1
2
3
4
5
6
7
// 定义并赋值一个map数据,使用的空接口可以接收任何数据类型
MapJson := map[string]interface{}{
"姓名": "张三",
"年龄": 18,
"生日": "2000-01-01",
"城市": []string{"上海", "北京"},
}

操作map映射

判断map映射指定的key是否存在

1
2
3
4
5
6
func main() {
m := map[string]int{"张三": 60, "李四": 70, "王五": 80}
// 判断key是否存在
v, ok := m["张三"]
fmt.Println(v, ok)
}

对map元素的增、删、改、查操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func main() {
m := map[string]int{"张三": 60, "李四": 70, "王五": 80}

// map元素的添加,当指定的key不存在则增加元素
m["赵六"] = 90
fmt.Println(m) // [张三:60 李四:70 王五:80 赵六:90]

// map元素的删除,注意:当删除一个不存在的key时不会报错
delete(m, "李四")
fmt.Println(m) // [张三:60 王五:80 赵六:90]

// map元素的更改,当指定的key已存在时则对key的元素更新
m["李四"] = 100
fmt.Println(m) // [张三:60 李四:100 王五:80 赵六:90]

// 查询指定key对应的元素
fmt.Println(m["王五"]) // 80
}

map元素的遍历

1
2
3
4
5
6
func main() {
m := map[int]string{1: "zhangsan", 2: "lisi", 3: "wangwu"}
for k, v := range m {
fmt.Println(k,v)
}
}