Map 是一种无序的键值对的集合,最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
定义Map
使用内建函数make或使用map关键字来定义。
/* 使用 make 函数 */
map_variable := make(map[KeyType]ValueType, initialCapacity)
- KeyType :键的类型
- ValueType :值的类型
- initialCapacity :可选的参数,用于指定 Map 的初始容量(Map 中可以保存的键值对的数量)。如果不指定 initialCapacity,Go 语言会根据实际情况选择一个合适的值
例:
// 创建一个空的 Map
m := make(map[string]int)
// 创建一个初始容量为 10 的 Map
m := make(map[string]int, 10)
也可以使用字面量创建map
// 使用字面量创建 Map
m := map[string]int{
"apple": 1,
"banana": 2,
"orange": 3,
}
获取元素:
package main
import "fmt"
func main() {
// 使用字面量创建 Map
m := map[string]int{
"apple": 1,
"banana": 2,
"orange": 3,
}
// 获取键值对
v1, ok1 := m["apple"]
v2, ok := m["pear"] // 如果键不存在,ok 的值为 false,v2 的值为该类型的零值
fmt.Println(v1, ok1)
fmt.Println(v2, ok)
}
v1,v2用来存储键值对的value,ok用来存储是否存在这样一个键值对
结果展示:
1 true
0 false
一些常见操作:
// 修改键值对
m["apple"] = 5
// 获取 Map 的长度
len := len(m)
// 遍历 Map
for k, v := range m {
fmt.Printf("key=%s, value=%d\n", k, v)
}
// 删除键值对
delete(m, "banana")
示例:
package main
import "fmt"
func main() {
var siteMap map[string]string /*创建集合 */
siteMap = make(map[string]string)
/* map 插入 key - value 对,书籍类型对应的书籍 */
siteMap["纪传体史书"] = "史记"
siteMap["小说-演绎"] = "三国演义"
siteMap["小说-爱情"] = "半生缘"
siteMap["科幻"] = "三体"
/*使用键输出地图值 */
for key := range siteMap { //key只是一个名字,可以替换成其他名字,输出的是key值
fmt.Println(key, "---------", siteMap[key])
}
/*查看元素在集合中是否存在 */
name, ok := siteMap["戏剧"] /*如果确定是真实的,则存在,否则不存在 */
if ok {
fmt.Println("戏剧 的 站点是", name)
} else {
fmt.Println("戏剧 站点不存在")
}
}
结果展示:
纪传体史书 --------- 史记
小说-演绎 --------- 三国演义
小说-爱情 --------- 半生缘
科幻 --------- 三体
戏剧 站点不存在
delete函数
删除map中的元素
package main
import "fmt"
func main() {
/* 创建map */
countryCapitalMap := map[string]string{"France": "Paris", "Italy": "Rome", "Japan": "Tokyo", "India": "New delhi"}
fmt.Println("原始地图")
/* 打印地图 */
for country := range countryCapitalMap {
fmt.Println(country, "首都是", countryCapitalMap[country])
}
/*删除元素*/
delete(countryCapitalMap, "France")
fmt.Println("法国条目被删除")
fmt.Println("删除元素后地图")
/*打印地图*/
for country := range countryCapitalMap {
fmt.Println(country, "首都是", countryCapitalMap[country])
}
}
结果展示:
原始地图
France 首都是 Paris
Italy 首都是 Rome
Japan 首都是 Tokyo
India 首都是 New delhi
法国条目被删除
删除元素后地图
Italy 首都是 Rome
Japan 首都是 Tokyo
India 首都是 New delhi