跳到主要内容

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" 的值,并检查这个键是否存在。

  • 如果键存在(即oktrue),就打印出对应的值(这里是 "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中没有此元素")
}
}

vuserInfo 这个 map 中键 "username" 对应的值。

在这个代码里,v 的值就是 "zhangsan"。可以把 v 想象成从 userInfo 这个"字典"中取出来的那一项。

至于 if ok,它的作用是用来检查 "username" 这个键在 map 里是否存在。ok 是一个布尔值(truefalse

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 关键字遍历 scoreMapk 代表键(名字),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) 只打印键,最终输出了 zhangsanlisiwangwu

package main

import (
"fmt"
)

func main() {
scoreMap := map[string]int{
"zhangsan": 24,
"lisi": 26,
"wangwu": 24,
}

for k := range scoreMap {
fmt.Println(k)
}
}