当前位置: 首页 > ops >正文

【Goland】:Map

目录

1. Map的概念

2. Map的增删查改

2.1 新增 / 修改

2.2 查询

2.3 删除

2.4 遍历

3. Map元素排序

4. Map切片


1. Map的概念

map 是一种 键值对(key-value) 的无序集合,类似于C++ 里的 哈希表

  • Key(键):必须是支持比较的类型(如 intstringbool、指针等)。不能用 slicemapfunction 作为 key。

  • Value(值):可以是任意类型(包括切片、结构体、函数等)。

  • 无序:Map 的迭代顺序是随机的,每次遍历结果可能不同。

1. 使用 make 创建

    m := make(map[string]int)m["苹果"] = 1m["香蕉"] = 2fmt.Println(m)      // map[苹果:1 香蕉:2]

2. 使用字面量创建

    m := map[string]string{"apple": "苹果","hello": "你好",}fmt.Println(m) // map[apple:苹果 hello:你好]

2. Map的增删查改

2.1 新增 / 修改

  • 语法:map[key] = value

  • 如果 key 不存在 → 新增

  • 如果 key 已存在 → 更新

    m := map[string]string{"apple": "苹果","hello": "你好",}m["pear"] = "梨"    // key 不存在 → 新增m["hello"] = "哈喽" // key 已存在 → 更新fmt.Println(m) // map[apple:苹果 hello:哈喽 pear:梨]

2.2 查询

  • 直接用 map[key] 取值

  • 如果 key 不存在 → 返回该 value 类型的 零值

  • 想区分 "零值" 和 "不存在" → 用 value, ok := map[key]

    m := map[string]string{"apple": "苹果","hello": "你好",}// 查询存在的 keyfmt.Println(m["apple"]) // 苹果// 查询不存在的 keyfmt.Println(m["pear"]) // "" (string 的零值)// 判断 key 是否存在a, ok1 := m["apple"]fmt.Println(a, ok1) // 苹果 trueb, ok2 := m["pear"]fmt.Println(b, ok2)  // "" false

2.3 删除

  • 使用内建函数 delete(map, key)

  • 删除不存在的 key 不会报错

	m := map[string]string{"apple": "苹果","hello": "你好",}delete(m, "apple")fmt.Println(m)     // map[hello:你好]

2.4 遍历

  • map中的键值对是无序的,每次遍历map得到的键值对序列都是不可预测的。
    m := map[string]string{"apple": "苹果","hello": "你好",}for k, v := range m {fmt.Printf("key=%s, value=%s\n", k, v)}

3. Map元素排序

Map 是无序的,遍历顺序是随机的(即使多次遍历同一个 map,顺序也可能不一样)。

如果我们想对 map 里的 key 或 value 排序,需要 先把 key 或 value 拷贝出来放到切片中,再排序

	m := map[int]string{1: "周一",7: "周日",3: "周三",2: "周二",5: "周五",4: "周四",6: "周六",}// 1. 获取map中所有的keyvar key []intfor k := range m {key = append(key, k)}// 2. 排序key值sort.Ints(key)// 3. 遍历keyfor _, k := range key {fmt.Println(k, m[k])}

4. Map切片

切片和 map 是两种不同的数据结构

  • map 是键值对集合

  • slice 是动态数组

map 切片,就是一个 切片,切片的每个元素是 map

[]map[keyType]valueType// map 切片 = 切片的每个元素是 map

这种结构常用于存储 多个 map 的集合,例如多个学生的信息,每个学生的信息用一个 map 表示,所有学生放到一个切片里。

	var a = make([]map[string]int, 2)a[0] = make(map[string]int)a[0]["赵一"] = 1a[0]["王二"] = 2a[1] = make(map[string]int)a[1]["张三"] = 3a[1]["李四"] = 4for i, v := range a {fmt.Println(i, v)}/*0 map[王二:2 赵一:1]1 map[张三:3 李四:4]*/

追加 map

    // 定义一个空切片var users []map[string]string// 追加 mapusers = append(users, map[string]string{"name": "Tom", "age": "18"})users = append(users, map[string]string{"name": "Jerry", "age": "20"})users = append(users, map[string]string{"name": "Alice", "age": "22"})// 遍历for _, user := range users {fmt.Println(user)}

http://www.xdnf.cn/news/18065.html

相关文章:

  • 【音视频】ISP能力
  • iOS 应用上架全流程实践,从开发内测到正式发布的多工具组合方案
  • Qt笔试题
  • HTML应用指南:利用POST请求获取全国华为旗舰店门店位置信息
  • 蓝桥杯算法之搜索章 - 6
  • Python入门第8课:模块与包的使用,如何导入标准库与第三方库
  • vite+react+antd,封装公共组件并发布npm包
  • lamp架构部署wordpress
  • 【新手易混】find 命令中 -perm 选项的知识点
  • Vue2篇——第六章 Vue 路由(VueRouter)全解析
  • 【AI论文】观察、聆听、记忆与推理:具备长期记忆能力的多模态智能体
  • 神经网络显存占用分析:从原理到优化的实战指南
  • 51c大模型~合集170
  • 窗口看门狗(WWDG)
  • SpringBoot--JWT
  • 【加密PMF】psk-pmk-ptk
  • FPGA驱动量子革命:微美全息(NASDAQ:WIMI)实现数字量子计算关键验证
  • DFS与BFS模块总结
  • 【论文阅读】-《HopSkipJumpAttack: A Query-Efficient Decision-Based Attack》
  • 哪里找最新AI工具官网?如何快速对比ChatGPT替代品?AI工具导航指南 - AIbase
  • WordPress (LNMP 架构) 一键部署 Playbook
  • 【运维实战】系统全链路监测方案~架构到实践
  • linux:告别SSH断线烦恼,Screen命令核心使用指南
  • 计算机视觉(9)-实践中遇到的问题(六路相机模型采集训练部署全流程)
  • Day119 持续集成docker+jenkins
  • 机器学习之数据预处理(二)
  • 探索性测试:灵活找Bug的“人肉探测仪”
  • 双通道审核智能合约更新路径:基于区块链与AI融合的编程范式分析
  • gflags框架安装与使用
  • [激光原理与应用-296]:理论 - 非线性光学 - 线性光学与非线性光学对比