8.Map
Map介绍
Map 是一种无序的基于 key-value(键值对)的数据结构。
在Go语言中,Map是一种引用类型,必须使用 make()
函数来初始化后才能使用。
Map 定义
在Go语言中,Map的定义语法如下:
map[KeyType]ValueType
其中:
- KeyType:表示键的类型。
- ValueType:表示键对应的值的类型。
- Map类型的变量默认初始值为
nil
,需要使用make()
函数分配内存。
其中 cap 表示 Map 的容量,但这个参数并不是必须的。
注意:获取 Map 的容量不能使用
cap
函数,因为cap
返回的是数组切片分配的空间大小,根本不能用于 Map。如果需要获取 Map 的容量,可以使用
len()
函数。
package main
import (
"fmt"
)
func main() {
userInfo := map[string]string{
"username": "root",
"password": "123456",
}
fmt.Println(userInfo) // 输出:map[password:123456 username:root]
}
Map 基本使用
3.1 判断某个建是否存在
使用v, ok := userInfo["username"]
来从map
中获取键为 "username"
的值,并检查这个键是否存在。
- 如果键存在(即
ok
为true
),就打印出对应的值(这里是"zhangsan"
)。 - 如果键不存在,则会打印中文提示信息
"map中没有此元素"
。
package main
import (
"fmt"
)
func main() {
userInfo := map[string]string{
"username": "zhangsan",
"password": "123456",
}
v, ok := userInfo["username"]
if ok {
fmt.Println(v) // 输出: zhangsan
} else {
fmt.Println("map中没有此元素")
}
}
v
是 userInfo
这个 map
中键 "username"
对应的值。
在这个代码里,v
的值就是 "zhangsan"
。可以把 v
想象成从 userInfo
这个"字典"中取出来的那一项。
至于 if ok
,它的作用是用来检查 "username"
这个键在 map
里是否存在。ok
是一个布尔值(true
或 false
)
3.2 delete 函数
delete()
函数可以让你从 map
中安全地移除某个键以及它对应的值。
package main
import (
"fmt"
)
func main() {
userInfo := map[string]string{
"username": "root",
"password": "123456",
}
delete(userInfo, "password") // 将 "password" 从 map 中删除
fmt.Println(userInfo) // 打印: map[username:root]
}
Map 遍历
4.1遍历 key 和 value
使用 range
关键字遍历 scoreMap
,k
代表键(名字),v
代表值(分数)。
package main
import (
"fmt"
)
func main() {
scoreMap := map[string]int{
"zhangsan": 24,
"lisi": 26,
"wangwu": 24,
}
for k, v := range scoreMap {
fmt.Println(k, v)
}
}
4.2 只遍历 Key
fmt.Println(k)
只打印键,最终输出了 zhangsan
、lisi
和 wangwu
。
package main
import (
"fmt"
)
func main() {
scoreMap := map[string]int{
"zhangsan": 24,
"lisi": 26,
"wangwu": 24,
}
for k := range scoreMap {
fmt.Println(k)
}
}