type
status
date
slug
summary
tags
category
icon
password
AI summary

Go语言基础之Map


1. 什么是Map

Map 是 Go 语言中一种内置的数据结构,用于存储键值对(key-value)的集合。它具有以下特点:
  1. 键(Key)是唯一的,值(Value)可以重复。
  1. 无序性:键值对的存储顺序与插入顺序无关。
  1. 引用类型:Map 的操作是基于引用的,传递 Map 时不会复制数据。
Map 是解决快速查找问题的重要工具,在许多场景下都非常实用,例如计数、分组、索引等。

2. 声明和初始化 Map

2.1 声明 Map

可以通过以下方式声明一个 Map:
  • KeyType 是键的类型,必须是可比较类型,例如 intstringbool 等。
  • ValueType 是值的类型,可以是任意类型。
此时 m 的值是 nil,在未初始化时不能直接使用。

2.2 使用 make 函数初始化 Map

make 函数可以创建并初始化一个 Map:
  • initialCapacity 是可选的,表示初始容量。
示例代码:

2.3 使用字面量初始化 Map

通过字面量可以直接初始化 Map:
示例代码:

3. 操作 Map

3.1 添加或更新元素

可以通过键直接为 Map 添加或更新元素:
示例代码:

3.2 访问元素

通过键直接访问 Map 的值:
  • 如果键存在,则返回对应的值。
  • 如果键不存在,则返回值类型的零值。
示例代码:

3.3 判断键是否存在

可以通过以下方式判断键是否存在:
  • ok 为布尔值,true 表示键存在,false 表示键不存在。
示例代码:

3.4 删除元素

使用 delete 函数可以删除指定的键值对:
示例代码:

3.5 遍历 Map

使用 for range 遍历 Map 的键值对:
示例代码:

4. Map 的注意事项

  1. 键的类型限制
      • Map 的键类型必须是可比较的,例如 intstringbool、指针等。
      • 不支持切片、Map、函数等不可比较类型作为键。
  1. Map 的无序性
      • Map 的键值对是无序存储的,遍历时的顺序不可预测。
  1. Map 是引用类型
      • 如果两个变量引用同一个 Map,对其中一个变量的修改会影响另一个。
  1. 初始化后才能使用
      • 未初始化的 Map 是 nil,直接使用会导致运行时错误。

5. Map 的应用场景

  1. 统计元素出现的次数:
    1. 字符串映射:

      6. 总结

      • Map 是 Go 语言中存储键值对的基础数据结构,使用方便且功能强大。
      • 熟练掌握 Map 的操作和注意事项,有助于编写高效、简洁的 Go 代码。
      • Map 的灵活性使其在许多场景下成为首选的数据结构。

      练习题

      练习题 1: 单词统计

      编写一个函数,接受一个字符串切片,统计每个单词出现的次数并返回结果。
      示例输入:
      示例输出:

      练习题 2: 找出 Map 中的最大值

      编写一个函数,接受一个 map[string]int,返回其中值最大的键和值。
      示例输入:
      示例输出:

      练习题 3: 反转 Map 的键值对

      编写一个函数,接受一个 map[int]string,返回一个反转后的 map[string]int,要求原 Map 的值是唯一的。
      示例输入:
      示例输出:
      函数切片