1. 定义映射
大多数主流编程语言都支持映射,因为它们可以说是存储数据的最重要的数据结构之一。映射是成对值的集合,在每对值中,其中一个称为 “键” ,另一个则为它对应的 “值”。
可以使用映射的键来引用它对应的值,从而避免引用值本身;还可以使用映射来更改与另一个值关联的值。
Go 通过内置的 map 数据类型来提供映射功能,基本使用格式如下所示:
map[KeyType]ValueType
键的类型和值的类型可以不同,但所有 “键” 的类型必须相同,所有 “值” 的类型必须相同。映射中的值可以是任何类型(甚至是其他映射类型)。映射的“键” 可以是以下任何一种类型。
- 布尔类型
- 数值类型
- 字符串
- 指针
- 包含上述类型的结构体或数组
- 通道
- 接口类型
由于在映射中键是标识符,因此每个键必须在映射中是唯一的。虽然多个键值对中可以出现相同的“值”,但是同一个键不能在多个键值对中同时出现。
可以使用 map 关键字来定义和初始化一个映射。下面代码清单给出一个简单的例子,用于存储单词在文档中出现的次数。
package mainimport {"fmt"
}func main(){FreqOccurrence := map[string]int{"hi":43,"hello":28,"hey":44,"weather":1,"great":35,}fmt.Println("map value:",FreqOccurrence)
}
1.1 维护类型
与在 Go 中使用其他数据结构一样,也需要小心使用映射。
package mainimport ("fmt"
)func main() {FreqOccurrence := map[string]int{"hi": 23,"hello": 2,"hey": 4,"weather": 1.5,"great": 35,}fmt.Println("Map value:", FreqOccurrence)
}
1.2 重复的键
在使用映射时需要记住的重要一点是键必须是唯一的。下面代码尝试使用重复的键。
package mainimport ("fmt"
)func main() {FreqOccurrence := map[string]int{"hi": 23,"hello": 2,"hey": 4,"weather": 5,"great": 35,"hi": 10,}fmt.Println("Map value:", FreqOccurrence)
}
2.空映射
与其他数据类型一们,可以创建空映射,但这样做没有什么用处。
3. 使用 make 创建映射
虽然可以在同一步骤中声明和初始化一个映射,但有时可能想定义一个还没有任何内容的映射,不过正如刚才看到的,不能将映射声明为空变量,然后使用标准语法为其添加值。
4. 映射的长度
len 函数计算映射中键的数量(进而计算出键值对的数量)。下面代码清单使用 len 来显示映射的大小。
5. 检索映射元素
因为键是映射中每个元素的标识符,所以可以使用键来检索与之相关联的值。
6. 检查映射中的键
有时,我们只想知道一个键是否存在于映射中。为此,可以使用布尔表达式来查找给定的键,并返回 true 或 false .
7. 遍历映射
与其他数据结构一样,可以使用 for 循环来遍历映射中的键值对。下面代码清单使用由映射大小决定的范围来遍历映射。
8.从映射中删除元素
Go 带有一个 delete 函数,可以使用下列语法从映射中删除键值对。
9. 使用字面值声明映射
与其他变量一样,可以在声明映射的同时将字面值添加到其中。下面代码清单在创建 months 映射时直接给出字面值。