From af490e80f4e5b6ea079e44dd61985eedd58f01e1 Mon Sep 17 00:00:00 2001 From: = <=> Date: Fri, 11 Jun 2021 22:58:59 +0800 Subject: [PATCH 1/5] finish ch 22 --- chap-22-Maps/chapter_22.md | 675 ++++++++++++++++++ chap-22-Maps/imgs/2d_map.20011164.png | Bin 0 -> 48759 bytes chap-22-Maps/imgs/go_hashmap.c706cf7b.png | Bin 0 -> 33801 bytes chap-22-Maps/imgs/hash_table.3a049d36.png | Bin 0 -> 43810 bytes chap-22-Maps/imgs/map_definition.0dfd1bb3.png | Bin 0 -> 37216 bytes chap-22-Maps/imgs/map_inside_map.dfe70134.png | Bin 0 -> 10625 bytes chap-22-Maps/imgs/maps.a1e5819d.jpg | Bin 0 -> 40350 bytes 7 files changed, 675 insertions(+) create mode 100644 chap-22-Maps/chapter_22.md create mode 100644 chap-22-Maps/imgs/2d_map.20011164.png create mode 100644 chap-22-Maps/imgs/go_hashmap.c706cf7b.png create mode 100644 chap-22-Maps/imgs/hash_table.3a049d36.png create mode 100644 chap-22-Maps/imgs/map_definition.0dfd1bb3.png create mode 100644 chap-22-Maps/imgs/map_inside_map.dfe70134.png create mode 100644 chap-22-Maps/imgs/maps.a1e5819d.jpg diff --git a/chap-22-Maps/chapter_22.md b/chap-22-Maps/chapter_22.md new file mode 100644 index 0000000..c147914 --- /dev/null +++ b/chap-22-Maps/chapter_22.md @@ -0,0 +1,675 @@ +# Chapter 22: Maps +![Maps](./imgs/maps.a1e5819d.jpg) + +## 1 你将在本章学到什么 + +- map 是什么? +- 什么是 key, 什么是 value? +- 如何创建一个 map。 +- 如何在 map 中插入一个 entry? +- 如何从 map 中获取entry。 + +## 2 涵盖的技术概念 + +- Map 类型 +- Key-Value 对(键值对) +- Map entry +- 哈希表 +- 时间复杂度 + +## 3 我们为什么需要 Map ? +在本节中,我们将详细介绍映射是如何工作的。但首先,让我们花一些时间,通过一个例子来理解为什 +么这个数据结构是有用的: +### 3.0.0.1 使用 slice +```go +// maps/without-maps/main.go +package main + +import "fmt" + +type testScore struct { + studentName string + score uint8 +} + +func main() { + results := []testScore{ + {"John Doe", 20}, + {"Patrick Indexing", 15}, + //... + //... + {"Bob Ferring", 7}, + {"Claire Novalingua", 8}, + } + fmt.Println(results) +} +``` +我们有一个类型结构体 testScore 和一个由 testScores 元素组成的 results slice。现在让我们假设我想要检索一个叫Claire Novalingua的学 +生的分数。由于我们使用了一个 slice ,我们必须遍历每个元素来找到被搜索的项: +```go +for _, result := range results { + if result.studentName == "Claire Novalingua" { + fmt.Println("Score Found:", result.score) + } +} +``` +为什么这个解决方案不是最优的? + +- 我们必须潜在地遍历切片的所有元素。想象一下你的 slice 包含了数千个元素!这对性能会产生很大影响。 +- 所写的代码不短。我们使用 for 循环范围和嵌套比较。这五行代码不容易读懂。 + +## 4 Map 是什么? +Map 是类型为 T 的元素的无序集合,由类型 U 的唯一键进行索引。 + +### 4.0.0.1 例子: +![Maps](./imgs/map_definition.0dfd1bb3.png) + +Map 例子 + +在前面的图(1)中,我们有一张代表足球世界杯冠军的地图。这里的 key 是年份(类型为 uint8 ), value 为 获胜国家名(类型为 string )。映射类型表示为: +```go +map[uint8]string +``` +map 的元素称为 "map entry"。它通常也被命名为 key-value pair (键-值对)。 + +### 4.0.0.2 一般定义 +```go +map[keyType]elementType +``` +使用 map ,你可以执行以下操作: + +- 使用特定键 (key) 存储值 (value) +- 删除与特定键 (key) 一起存储的值 (value) +- 检索与特定键 (key) 一起存储的值 (value) + +我们再举一个例子;字典可以使用 map 来存储。在字典中,我们存储的单词的定义。在本例中,定义是 map 中的值 (value),单词表示键 (key)。 +当你使用字典时,你搜索一个特定的单词来得到它的定义。我们不会根据定义查字典,这种类型的查找可能会花费你很多时间,因为定义没有被 +索引。我们可以把这个类比用在 map 上。我们总是根据一个特定的键 (key) 进行查找,map 是按键 (key) 建立索引的。 + +我们能否将Go中定义的所有类型都放到 map 中作为键 (key) 类型?值 (value) 类型呢? + +## 5 keys: 允许使用的类型 +你不能将任何类型都作为 key 来使用。有一个限制:“作为key的类型必须完全支持比较操作符 == 和 != 的运算” 。 +因此我们排除了哪些类型? + +- function +- map +- slice +- 由 function ,map 或 slice 组成的数组 +- 包含 function , map 或 slice 的字段的结构体类型 + +```go +// FORBIDDEN: an array of slices +[3][]int + +// FORBIDDEN : an array of functions +[3]func(http.ResponseWriter, *http.Request) + +// FORBIDDEN: a type with a slice field +type Test struct { + scores []int +} +//... +``` + +## 6 key 必须是不同的 +map 中的 key 必须是不同的。 + +我们可以想象,map 就像一个有许多锁着的门的走廊。每扇门背后,都有一个 value 。打开门的钥匙 (key) 是独一无二的(你可以复制钥匙,但钥匙的样式是一 +样的)。每把钥匙都能打开一扇门。钥匙和门是 1:1 的关系。 + +## 7 Element +Element 是存储在 map 上的内容。对于元素,没有关于类型的限制。你可以存储任何你想要的东西。您还可以将另一个 map 存储到一个值中。 例如,一个 +元素可以是一个年份,一个匹配的分数,一个表示某应用程序的用户的结构体… + +## 8 如何建立一个 map +### 8.1 使用内置函数 make + +你可以使用make内置函数来分配和初始化一个新 map: +```go +m:=make(map[string]int) +``` + +`m` 会是一个 `map[string]int` 类型的值,这被称为映射值,在内部它是一个指向哈希表的指针。我们将在下一节中了解什么是哈希表, +所以现在不要担心它。 + +### 8.2 使用 map 字面量语法 +使用前面的语法,我们初始化并分配映射。但是我们没有填充它。我们可以使用map文字语法直接填充它: +```go +worldCupWinners := map[int]string{ + 1930: "Uruguay", + 1934: "Italy", + 1938: "Italy", + 1950: "Uruguay"} +fmt.Println(worldCupWinners) +//map[1930:Uruguay 1934:Italy 1938:Italy 1950:Uruguay] +``` +在前面的代码清单中,我们创建了一个名为 `worldCupWinners` 的地图。这个映射直接由四个条目填充。世界杯足球比赛的前四名冠军。这里的键是整数; +它们代表年份。这些值是字符串,表示在给定年份赢得奖杯的国家的名称。1930年是乌拉圭赢得了奖杯。 + +请注意,值可以重复。意大利和乌拉圭的值重复了两次,这是完全可以的。 + +还请注意,在初始化映射之后,还可以向其添加新值。在我们的示例中,我们可以向 map 中添加另一年! + +您还可以使用映射字面量语法来创建一个空映射。 + +```go +a := map[int]string{} +``` + +在前面的代码清单中,a是一个map(已初始化并已分配),但是其中没有存储键值对。 + +## 9 什么是哈希表 (hash table) ? +下面是哈希表工作原理的简化视图。(go的实现略有不同): +![Maps](./imgs/hash_table.3a049d36.png) +hash table + +一个哈希表由 3 个元素组成: + +- **一个哈希函数**。它的作用是将键转换为唯一标识符。例如,键 1930 将被传递给哈希函数,它将返回 "4" 。 +- **索引存储**。用于在内存中保存值的一种索引存储。存储最终是用桶来组织的。每个桶可以存储特定数量的值。 + +[comment]: <> (上面这里The storage is eventually organized in buckets. 翻译起来不是很顺畅) + +当我们向哈希表添加键值对时,算法将执行以下步骤: + +1. 使用 `key` 获取 `hash_function(key)` 的返回值(我们使用 `h` 表示返回值)。 `h` 是存储数据的索引(例如,4)。 +2. 将值存储到索引 `h` 的容器中。 + +从给定的key中检索value值也将使用哈希函数 + +1. 从值中获取返回值hash_function(key)。它将返回容器索引。 +2. 从给定容器中提取数据并将其返回给用户。 + +[comment]: <> (这里不太对的感觉……) + +### 9.1 一个好的哈希函数 (hash function) + +一个好的哈希函数必须具备以下特性: + +- 避免哈希碰撞: + + - 如果您将键 `1989` 传递给哈希函数,它将返回,例如 `i`。 `i` 将索引的存储值与 `1989` 挂钩。 + - 试想如果现在 `1938` 传递给哈希函数同样返回了 `i` ! + - 当您用键 `1989` 存储一些东西时,它将删除已经为键 `1938` 存储的内容。 + - 想象一下这种碰撞会产生的混乱!例如,hash函数MD5可能产生冲突。(更多信息,请阅读文章[@stevens2006fast]) + +- 计算索引以在有限的时间内获得数据的位置。(哈希函数必须是高效的) +- 产生的哈希必须及时稳定。在每次调用时,该键应该产生相同的哈希。 + +## 10 哈希表的时间复杂度 + +- 算法的复杂度是指在机器上运行它所需要的资源数量。 +- 时间复杂度是一种复杂度;它指定运行一个程序所需的计算机时间。 + +时间复杂度将取决于哈希表的实现,但是请记住,搜索值和插入新键值对的时间复杂度非常低。 + +下面的时间复杂度通常适用于哈希表: + +- 插入:`O(1)` +- 搜索:`O(1)` + +对于包含三个元素的 map 和包含300万个元素的 map ,搜索和插入将使用相同数量的基本操作! + +我们说它是一个**常量时间**算法。我们还说它是 **order 1**, 这里用的是大 `O` 符号。 + +## 11 内部操作:哈希表实现 + +这是一个关于 map 在Go中是如何实现的概述。内部实现可能随着时间的推移而改变。 + +源代码位于运行时包(runtime/map.go)中。 + +- 一个 Go 中的 map 是一个 **"buckets"** 的数组 +- 一个 **bucket** 最多包含8个键/元素对(也称为8个条目 (entry) )。 +- 每个桶都由一个数字 (id) 标识。 + +### 11.0.0.1 查找一个元素 + +- 为了查找 map 中的一个元素,用户需要一个键 (key) 。 + - Key: "1930" +- 这个键会被传递给**哈希函数**,它会返回一个**哈希值**(一个整数)。 +- 该哈希值包含桶 id 。哈希函数不直接返回桶的 id ,返回值 `h` 必须进行转换以获得桶的 id 。 + - Bucket id = 3 +- 知道桶 id 后,下一步就是在桶中找到正确的条目。这是通过将给定的键与所有桶键进行比较来完成的。 + + - Key: "1930" 。Go将遍历 bucket 的键并返回相应的元素。 + +### 11.0.0.2 插入一个元素 +- 用户提供键和元素值 + + - 例如:Key: "1930" - Element: "Uruguay" + +- **key** 被传递给哈希函数。哈希函数将返回哈希值。 +- 根据哈希值,我们可以获取到桶 id +- 然后Go将遍历桶元素,以找到存储键和元素的位置。 + + - 当键已经存在时,Go将覆盖元素的值。 + +![Maps](./imgs/go_hashmap.c706cf7b.png) +Go hashmap 实现 + +## 12 使用示例 +在本节中,我们将看一下您可以在 map 上进行的最常见的操作。 为此,我们将使用一个例子。 + +### 12.0.0.1 示例应用 + +- 您被要求为人力资源部门构建一个应用程序 +- 在alpha版本中,我们将通过CSV文件加载员工列表 +- 用户需要通过员工的 `eid` (由字母和数字组成)查询员工 + + - 例如:V45657 ,V45658... + +下面是CSV文件的摘录: +``` +employeeId,employeeName,genre,position +V45657,John Ollivero,M,CEO +V45658,Frane Elindo,F,CTO +V6555,Walter Van Der Bolstenberg,M,Sales Manager +``` + +### 12.0.0.2 为什么使用 map ? +用户将根据员工的唯一 Id **查询**员工。 + +- 我们将根据唯一的 key 查询员工 +- 这个id不是一个整数;我们可以用 slice 或 map 。 + +我们选择使用 map ;创建一个 `employee` 类型。 + +- Keys: employeeId => string +- Elements : values of type employee + +### 12.0.0.3 从CSV读取数据 + +让我们构建脚本的第一部分(将数据读入文件) + +```go +// maps/reading-csv/main.go +package main + +import ( + "encoding/csv" + "fmt" + "io" + "log" + "os" +) + +func main() { + file, err := os.Open("/Users/maximilienandile/Documents/DEV/goBook/maps/usages/employees.csv") + if err != nil { + log.Fatalf("impossible to open file %s", err) + } + + defer file.Close() + + r := csv.NewReader(file) + for { + record, err := r.Read() + if err == io.EOF { + break + } + if err != nil { + log.Fatal(err) + } + fmt.Println(record) + } +} +``` + +第一步是打开 `employees.csv` 文件。 + +我们使用的是标准库 `os` 。与往常一样,我们检查错误并返回一些错误(但在返回之前,我们打印一个错误消息)。 + +[@_@]: # (原文 we check for errors and return if they are some(but before returning, we are printing an error message) + +之后,我们使用 `csv` 包。我们用 `r:= csv.NewReader(file)` 创建一个 reader ,它将允许我们逐行读取文件。我们初始化一个行计数器来跟踪行号。 + +然后用 `for` 循环开始读取。我们用`record, err:= r.Read()` 读取新的一行。`record`变量是字符串(`[]string`)的一个片段。接下来,我们检查错 +误,`r.Read()`将产生一个`err`当它读取到文件末尾`io.EOF`时。我们必须在检查`err != nil`之前先检查这个。如果我们已经到达文件的末尾,我们将用 +关键字 `break` 停止 `for` 循环。之后,我们就可以读取文件的数据了。 + +变量`record`将返回,例如`[V45657 John Ollivero M CEO]`。 + +数据存储在一个 slice 中,在索引0处,我们将找到`employeeID`,在索引1处是`name`,在索引2处是`genre`,在索引3处是 `position`! + +我们还必须定义employee类型: +```go +type employee struct { + name string + genre string + position string +} +``` +准备工作已经完成,让我们跳转到 map 的创建和使用部分。 + +## 13 初始化以及添加一个 key-element 对 +```go +// initialize and allocate a new map +employees := make(map[string]employee) +// ... +employee := employee{ + name: record[1], + genre: record[2], + position: record[3]} +// Add a new entry to the map +employees[employeeId] = employee +``` + +要添加一个键和一个元素组成的对,只需使用下面的语法: +```go +m[key]=value +``` + +## 14 检索一个值 + +要从map中获取元素,你必须知道它对应的key。有两种不同的方法来实现这个操作: + +### 14.0.1 短语法 +假设您正在寻找与雇员 3 相关的数据。 + +你将通过调用以下语句来检索值 (struct employee) : +```go +walter := employees["V6555"] +``` + +这里,我们将映射employeeMap中包含的值赋给变量walter,键 (key) 为V6555。 + +### 14.0.2 如果 key 不存在怎么办? +但是如果这个值不存在呢?你会让你的程序陷入 panic 吗?让我们试试看: +```go +// when there is no such pair +ghost := employees["ABC55555"] +fmt.Println(ghost) +//{ } +fmt.Println(reflect.TypeOf(ghost)) +// main.employee +``` +在这里,我们试图获取id为 "ABC55555" 的员工的值。 + +该键在 map 上不存在。**Go将返回该类型的空值。** + +#### 14.0.2.1 警告!要非常小心这种语法,因为它可能会导致错误。 +在我们的 HR 软件示例中,假设在将数据加载到 map 中之后,您向用户建议某种类型的界面,在那里他们可以通过 id 查看员工的数据。如果用户输 +入 id "100" 会怎样?对于这些不存在的键,map 会返回一个空对象 `employee`。 + +我们可以猜测这个员工不存在,但不是100%肯定,因为这些空字段也可能来自已经损坏的文件。 + +这就是为什么 Go 的创造者们提供了一种更聪明的方法来检索 map 上的条目。 + +### 14.0.3 双值赋值 +替代语法如下: +```go +v, ok := myMap[k] +``` +变量`ok`是一个布尔值,用于指示映射中 键-值对 的存在: + +键值对存在于映射中,**v** 被赋值为键 **k** 处的值 + +键值对不存在,**v** 被赋值为 valueType 类型的空值 + +你经常会看到这样的写法: +```go +// lookup with two values assignment +employeeABC2, ok := employees["ABC2"] +if ok { + // the key-element pair exists in the map + fmt.Println(employeeABC2) +} else { + fmt.Printf("No employee with ID 'ABC2'") +} +``` + +如果你只是想测试一个键是否存在于 map 中,那么可以忽略这个值: +```go +// ignore the value retrieved +_, ok := employees["ABC3"] +if ok { + // the key-element pair exists in the map +} else { + fmt.Printf("No employee with ID 'ABC3'") +} +``` +在前面的例子中,我们告诉编译器,我们不需要这个在赋值中使用了下划线 ("_") 字符检索到的值。 + +有一种更短的方法来实现相同的操作: + +```go +// shorter code +if _, ok := employees["ABC4"]; ok { + // the key-element pair exists in the map +} else { + fmt.Println("No employee with ID 'ABC4'") +} +``` +两个值的赋值和 ok 值的检查在一行代码中完成了! + +### 14.0.4 警告!映射值是不可寻址的 +从 map 中检索的值是不可寻址的。不能打印映射值的内存地址。 + +例如,以下代码: +```go +fmt.Printf("address of the100 %p", &employeeMap[100]) +``` +将导致编译错误: +```go +./main.go:66:14: cannot take the address of employeeMap[100] +``` +为什么会这样呢?因为 Go 可以在添加新键值对时改变键值对的内存位置。Go将在内部执行此操作,以保持检索键-值对的复杂性不变。因此,地址 +可能会失效。Go倾向于禁止访问一个可能无效的地址,而不是让您尝试。这是一件好事! + +### 14.0.5 内存使用情况的考虑 + +请注意,当您保存从映射中提取的值时(如果您不再使用该 map ),Go仍然会在内存中保存整个 map 。垃圾收集器不会删除这些不再使用的内存。 + + +## 15 删除条目 + +可以使用内置的 delete 函数删除键值对。该函数有以下函数声明: +```go +func delete(m map[Type]Type1, key Type) +``` +调用 delete 需要: + +- 一个 map 作为第一个参数 +- 一个 key + +第二个参数是你想删除的条目的 **key**。 + +- 如果该条目在 map 中不存在,它就不会陷入 panic (并且会编译)。 +- 如果第二个参数使用与 key 类型不同的类型,则程序将无法编译。 + +举个例子: + +如果你想从map `employees` 中删除索引为 2 的条目,你可以使用以下代码: +```go +delete(employees, "ABC4") +``` + +key 为 "ABC4" 的条目如果存在,将从 map 中被删除。 + +## 16 Length +你可以使用内置函数 **len** 来检索 map 中的条目数: +```go +fmt.Println(len(employees)) +// 3 +// There are three entries into the map + +// remove entry with index 2 +delete(employees, "V6555") + +fmt.Println(len(employeeMap)) +// 2 +// There are two entries into the map +``` + +## 17 遍历 map +你可以使用 for 循环和 range 子句来遍历映射的所有条目: +```go +for k, v := range employeeMap { + fmt.Printf("Key: %s - Value: %s\n", k, v) +} +// Key: V6555 - Value: {Walter Van Der Bolstenberg M Sales Manager} +// Key: V45657 - Value: {John Ollivero M CEO} +// Key: V45658 - Value: {Frane Elindo F CTO} +``` + +### 17.0.1 不要依赖迭代顺序! +注意,此代码段返回的元素序列,并非按照插入顺序排序。 +这是因为 map 中的顺序是没有保证的,如果我们尝试第二次运行相同的代码,我们可能会得到以下结果: +```go +Key: V45657 - Value: {John Ollivero M CEO} +Key: V45658 - Value: {Frane Elindo F CTO} +Key: V6555 - Value: {Walter Van Der Bolstenberg M Sales Manager} +``` +请记住这一点,因为它可能是错误的来源。 + +### 17.0.2 排序问题的解决方案 +可以通过使用另一个变量来存储插入顺序来解决这个排序问题。如果顺序对你很重要,你可以使用这个解决方案: +```go +order := []string{} +order = append(order, employeeID) +employeeMap[employeeID] = employee +``` +在这里,我们创建了一个 slice `order`。这个 slice 将按插入顺序将键存储下来。因此,每次向 map 添加条目时,我们都通过调 +用`order = append(order, employeeID)`向 slice 添加键。 + +这样,我们就可以按照插入的顺序获取条目: + +```go +for _, k := range order { + fmt.Printf("Key: %s - Value: %s\n", k, employees[k]) +} +``` + +我们遍历切片顺序以获得键,然后通过调用`employees[k]`来检索条目值,其中`k`表示 map `employees`的键。 + +## 18 二维 map (map 的 map) +在前面的示例中,我们希望使用结构来存储数据:`enployeeID => enployeeData` + +键是`employeeid`,值是结构体类型 `employee`。但假设我们不想存储一个结构体,而是存储另一个 map : + +![Maps](./imgs/2d_map.20011164.png) +二维 map + +在图2中有两个 map 。第二个 map 的类型是 `map[string]string`。我们以键 "Name" 、 "Position" 和 "Genre" 的形式存储, +值是对应的员工数据。第一个map的类型是`map[int]map[string]string`。这个类型的表示法有点令人困惑,但当你仔细观察它时,它是有意义的: + +![Maps](./imgs/map_inside_map.dfe70134.png) + +map 的值是另一个 map + +第二个 map 是内部 map 。它是第一个 map 的值。这种类型的每个条目都有一个整数键,值是一个`map[string]string`。 + +在我看来,二维 map 太复杂了。您可能最好使用以结构体作为值的 map 。 + +## 19 试一试 +### 19.1 问题 +1. 如何检查一个键/元素对是否在一个 map 中? +2. Go maps 内部是如何实现的? +3. 哪些类型是禁止作为 map 的 key 来使用的? +4. 为什么这些类型被禁止作为 map 的 key 使用? +5. 当您遍历 map 时,运行时将按您插入键和元素的顺序返回键和元素。对还是错? +6. 怎样从 map 中删除一个 key-value 对? +7. 如何获取 map 中的 key-value 对的数量? +8. 如何遍历一个 map? +9. 如果 map `M` 中并不存在键 `K`,`M[K]` 将返回什么? + +### 19.2 答案 +1. 如何检查一个键/元素对是否在一个 map 中? + 1. 假设您想要检查map `rooms`中是否存在键为102的键/元素对,可以使用`room, ok = rooms[102]`。当 `ok` 为 true 时,这个键值对就存在。 + +2. Go maps 内部是如何实现的? + 1. 在底层,Go maps 是由哈希表实现的 + +3. 哪些类型是禁止作为 map 的 key 来使用的? + 1. functions, slices, maps + 2. 任何由上述类型组成的数组 + 3. 任何包含上述类型的结构体 + +4. 为什么这些类型被禁止作为 map 的 key 使用? + 1. 因为比较操作符 == 和 != 并没有为这些类型完全定义。Go 需要能够在其内部实现中比较键。 + +5. 当您遍历 map 时,运行时将按您插入键和元素的顺序返回键和元素。对还是错? + 1. 错的,map 是一个无序的集合。Go 不保留插入顺序的记忆。如果你需要它,你必须自己保存它。 + +6. 怎样从 map 中删除一个 key-value 对? + 1. `delete(employees, "ABC4")`,当没有找到对应的 key 时,什么也不会发生。 + +7. 如何获取 map 中的 key-value 对的数量? + 1. `len(myMap)` + +8. 如何遍历一个 map? + 1. 使用一个 for 循环: `for k, v := range employees` + +9. 如果 map `M` 中并不存在键 `K`,`M[K]` 将返回什么? + 1. 它将返回元素类型的 0 值 + 2. 例如,如果元素是 int ,则返回 0 。 + +## 20 主要收获 +- map 是类型 V 的元素(值)的**无序**集合,由类型 K 的唯一键进行索引 +- map 类型这样表示:`map[K]V` +- map 中的元素称为映射条目或键-值对。 +- 要初始化 map ,可以使用以下语法: + ```go + m := make(map[string]uint8) + + m := map[string]uint8{ "This is the key":42} + ``` +- map 类型的 0 值为 nil。 + + ```go + var m map[string]uint8 + log.Println(m) + ``` + - 这里将输出 `nil`。 + +- 要将元素插入到 map 中,可以使用以下语法:`m2[ "myNewKey"] = "the value"`。 +- **重要**:map 在使用前需要被初始化 + + - 下面的程序会导致 panic: + ```go + var m map[string]uint8 + m["test"] = 122 + + panic: assignment to entry in nil map + ``` + +- 要检索 map 中的元素,可以使用以下语法: + ```go + m := make(map[string]uint8)// fill the map + valueRetrieved := m[ "myNewKey"] + ``` + - 当没有找到值时,变量`valueretrived`将等于映射值类型的 0 值。 + + -在这里`valueretriserved`等于 0 ( uint8 类型的 0 值) + ```go + m := make(map[string]uint8) + // fill the map + valueRetrieved, ok := m[ "myNewKey"] + if ok { + // found an entry in the map with the key "myNewKey" + + } else { + // not found :( + + } + ``` + `ok`是一个布尔值,如果 map 中存在一个具有该键的条目,它就等于true + +- 可以使用 for 循环遍历 map (使用 range 子句) + + - 警告:不应该使用插入顺序(它不保证)! + - 为了在内存中保持 map 中的插入顺序,可以创建一个 slice 并将每个键添加到其中 + - 然后可以遍历 slice 并按照插入的顺序获取每个值。 + +- 在 map 中插入和查找非常快,即使 map 里有很多条目。 + +--- +1. https://golang.org/ref/spec#Map_types +2. Go Specs https://golang.org/ref/spec#Map_types +3. https://en.wikipedia.org/wiki/Computational_complexity +4. https://en.wikipedia.org/wiki/Time_complexity +5. You can find more info about this notation on this Wikipedia article: https://en.wikipedia.org/wiki/Big_O_notation + +## Bibliography +- [stevens2006fast] Stevens, Marc. 2006. “Fast Collision Attack on Md5.” IACR Cryptology ePrint Archive 2006: 104. \ No newline at end of file diff --git a/chap-22-Maps/imgs/2d_map.20011164.png b/chap-22-Maps/imgs/2d_map.20011164.png new file mode 100644 index 0000000000000000000000000000000000000000..417dfc70499e739f6c580110e5039611d9d40d77 GIT binary patch literal 48759 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

bd)As{?+=>4LD?>YE+~SPP_m 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 U3mRpopkEL%VW7wq{N(jN0A9wtx&QzG literal 0 HcmV?d00001 diff --git a/chap-22-Maps/imgs/hash_table.3a049d36.png b/chap-22-Maps/imgs/hash_table.3a049d36.png new file mode 100644 index 0000000000000000000000000000000000000000..f9004799afd0ff13ebcaed82caabea5ae93b201d GIT binary patch literal 43810 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 MipqX271s0lKiGhZ^8f$< literal 0 HcmV?d00001 diff --git a/chap-22-Maps/imgs/map_definition.0dfd1bb3.png b/chap-22-Maps/imgs/map_definition.0dfd1bb3.png new file mode 100644 index 0000000000000000000000000000000000000000..079ab8f935df04a40fbf63f9cd4b9313aec47893 GIT binary patch literal 37216 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 literal 0 HcmV?d00001 diff --git a/chap-22-Maps/imgs/map_inside_map.dfe70134.png b/chap-22-Maps/imgs/map_inside_map.dfe70134.png new file mode 100644 index 0000000000000000000000000000000000000000..347ed2eb743df212b3fdf9865cb50fcde670ba34 GIT binary patch literal 10625 zcmch-bx>SE*XKWk1PcUr3-0djP6iv?g1ZHGn*<0R7~I_n?vUUb+#P~jaEHCm`&Mmj z{bcvQt(uye+jHmK?mpjhx_iziLKQ5BhC+k_0)fyJO`m&?ppo>R*h@+M}RUoa->J^f`V zeE1e8e@;kLP|*9qqK`s&!?Y|c+^h5T3h9lD)5k6A2`k*6mJ{7_Jhq?Dg@q4>h6K*M z&pKW&vv$^$e!Gysfj}#`>Q2NUkhmBq5$MWo5YV#?GF70TEAWbNpdepy1`x;@o&FsN zbP87p0{s$!H(-d8%?B6P=`eRVAc3x&5SrCTGXxTb%um<5x|-17f?mcz+9;H1L8M0@ z=WJBx!e8vDfbG+4xGJ2tP@@&n{7HJO2%laO(0-sWhT>*UX{pWA-MOD=;8cNvY<|4_ z)AhV@7&`gs<|ZZT$EUUuN=IUY!yEg0Rp z2%PyHW2w#xJ!U&PI+}rj0V((H&MRJC+Wc-mKQ=s^ii5+YKZ+0z4i1TeHCZ15fo|V* z`agz?p&^9kD+h}QVVKtFC>GY<>LGwchC}mk)Jxs&{%s=V=1PUl&Cg@6YiVh5rYb`x zzM&C^<22}rxb6ZMRI$P#+s#_#JI?$_xm0p7{KJ0F*YlW?Dk9eqwgzO7PcWkC6-Dw$ z@u&2p%uEr#yMLE^ZJuoLzfEf}va`K+Q`hV;Kv&#}YrHvhcO%9xl70)#F8S5f)l?lNB}f#1x3}wD zwq^I8sIi7jYjE)K2Pszk#Z;V<>;uXk=}-cBBEF6)R>NE zi6G?`X9u)09Wj8|KYM*lq!bZ(9%1WJR#F-nA2;p_c>d2Ux$&k)W9W7GTmz34dSPT` zjk){jcYiT&t%b<)8_>Q5S-AIiz{!1meg6M`BO>LFrSk!% zGUa0YcUe88KDVXfK zKS3d>ld4=KnY$ld1QK_;_{{JwW;>nNK@ur`=x@1pHP&(s9<$B{iMa_uqiNrFj~xP3 z1Tir&=)?~iC7*Uo(8S|s_{Y=Ir>Cd>{{G%x=`BGyq|~uprDRqU0z5*(p}orp>0t4= z^-EU zr2c2i;n7h?N5|3Oq0ce~Xx}wReIb5iM=;az?_hjy{xclN86mM745(OHSy@^dDo;Ii z;MU>r0d&P8&VX_L;rDxdR%#lW$%Ctsl9K<3qlx8BP-kC|KWn69?oS^elPcXCTs}oL4-ky zxwE#Orz-;f4_Ev9`>Zd$rZxQLA;0W-Jw=oO$4r-~<$2k+xEw12Yeh9< zV{#0PiOXxOYKeJkZV_W1&=m;&6N5P?Ve-fctjyofZvz?sm$*d^!&k*Z)4D~{>Bz%| z%T7k`?UH}7e^sr&Es;6K@2aBHfb-aN$H|QM>@=lWco9q4y$bcm`LDFd1qZFgH zf@&BsD-P3{)nmA#RTa$h;R=N)x@i9BtmEn>R4YF@+$$)lr-p|M)h^Fw03r85BX(ggm^oA5I9Jw?83Tu%I?rI*hAbr_91(trZ>ab=)b zLdK1ly?~45a$8tcMvLplQk(e~zANqkID2#zgutJ#&-k;rMrlnl2CGo23`vUW@D-7b)m?Q3VxFA2y?s&9H*d#NCW{Zt1mER*$Vy!X4FCiR5Vpc+z+hKGV2P5jrrLoq?S zoFe|GNiG>xk6;VxO0+Rnhz_zu#W3x23+30@*2cd^ER!W}%IJcj3T-YmztVfsE*7jK zbUdz)Nul}Y=yYK+4Ia!}hq4kLG?@DjVRunkDI4Tl+jouJU9yxv;s*;bw@o>)v<&s= zFo!~VymRA)f7q$jr*;0jXE0YR7E&E~%d?pLeRkN=2qR34|7YG$UJCn z8uGIt$0#In1jtH6q&u5^aeSqhRWJzNJlc13h4c*h+$B5wr1|$F)coBX(03Otp<9wm zxUj%FNea#B{Y14~BY_Ka&UfAAV*~{&-ud#<{ zqUPXCNII-nH#yPPJ)}a-{n1C)qK2Q7)l0cQPKz#a_WcM=@7~8wCv$_xN363aqpC!k z67Jza0}lve%yrW5>a-@B0|MxD;2{v)@iqujdjfX+=HYvNo4SKOazXefv1UE~Ywkm=V zCGmR-_j^$jF<9T?3@MiuX&h8L>wFMRxMgd-L2~#3e=s$9h^}Oz6O$dO%Q2Pbo4V=V z$ID7WV*GPckfXphu@{RmIVCx8INj8mze}=YnFLbcQ_GOm2g78g**SZHt#@BuE&^4k z3uRksQS6*F-n;XBI?8%1lc26sbUK>sCBq%k?y!lTnNd8Ub0VE6aqH$h!hGt&?=0dd z>2-pa@;COmRmj`O_hlnpamliNu_I@VpBeTD{PLzL6B$V=(kP|zvpd3h`S{$k>X+hv z50F}S_+a3P&)Onc$Dih#MYamDUe%|c;UO7{-C57eU^d^K$$_lY{fztGTkX!pi%78D zM`3n91AASGO35-=Bwwe2GKzcyG!EzGuEv>p`FYXX!d2v6L$$_l^0tNLYZ;Lk57%Mk z$pK>;Obtj<$tvqrjHPraxvGPg+QNyPyx-{e_OtNlHmreJp=qdf620%+Rku?orfYwe z8X~1Ik(Z+*xGHiV_qXws{62=v>w6OzQvudlTSIOW6U}v)YZ8=D&5yIekUTrlIaxwB z{MH`u{P1`$A~~2Yfqa>Z8{R+!pGDA{k-ep_S`6b&AEcf#8xp1ETFc>e(fymKYKQNy z{;@iqn6A%DOdv`~AgPi|2l~YV zt4utVp!e@%eT#^jT+&;q1&#dYeVloz$lt=UiR5NFB?F&K>Z%dljTF;)APDb>{|+$Q zOfb~b!v6fg8TIi?Ve58@@AlF!$mE$B2nAPZ5;R)O%@3o|)?KTPq>s5Xnq|()C)6+2 zdlir`!qf-T$HaE!4{(l4CxzuGr$e(6i44EUmBiUh(b9?5aOU56H0Uh!ex6Et@+Ok) zwjHK{%N3oJx|{p+S5{Xe)AaCZQl%n8*x|(*D+2PvSi?`B-*t#TuinJWEbS0CuS_<$ zGCNh+%6xdiI+C!OwX*AI3>}%tr0|`=G%i!=dcW!>xp+k+0BFE#PH5-K0d3ptt zMITM}H{bs8T$~bw zog3HngtV7RwruVR)hcipy`~WPb?ThQQg!>l;s>7|X5x4>LWZc7m+WhGCQ^{bQq`m<+B(H`17RL1VME-F2TwUiAh)PYt8k#-0vk@VnlvSkZm} zqmH#0tmqVf{PHKzW9rF@4)eUdFGTG2;h4$lYz8?!jmIY`Y&Ix7C1(SPtW{@&_}9zE zGQR(FN5qErxD_3`zrV@R1Nn>VRYN0eyW}!X*I+dqgNVx_JT{vrkC2BWz*%x|z=16DjfJ0PEok`?!8qLJ}xuS48+us3i6T0^@NoytlmW?{Z zidVm}y>s0{jYH}_0PgsQP&Y$tG<61hmUFj*iMx%zKHcZD69dv@tkdJSf(agcbZ)7R z8I$#bYYCPo3!&|m^TL?YcRwq#)6s6ihLH~Ii&1uxM`nA&gOs~R8=E1eJlKkx8wZmC z=Pa%$+?+SNS8=22Flh^%VN}e{t0cyAkNm8*pvAEH%vxt?_4XyOHw$et|5Di^ggJ{isEPgq}pY4?9G$RXyf?55^;-QRT*LD+q}>*H0U z3rDeHH9z`2+=b^h!c$9`cvl$K`E@x`tqL3Oh}c3g7oFRI z@~@u)D$$;2Z=YC2e_rnAY0(u#)yNiopqtU+v4$*7qSNr3cb`J5*|^JFt-u|`us3x^ z_259?Nd;aO@tD#9ASMD|I=ij=b-AZX*vFlXTcs_UjY=oem&w>k1~BmY?53T3C*&za z>uV7VVUROblz~g06*7)dGM^O|Gxj!jnb5I<1ro|44d!|hGF4D8%sTTR^zgX9^D1nNn>w$8g%FWVb^3<*^ih+5o_~YBicPH@fsK_HU z$UXX=4mzWFE}B%`7297w@VeV-y4$RFi+wUYzfHxeF<{VCB2Mh{p6&AUv{(-WTa1z( zoYa3*tTm*Q4Lx9WI6HLz8{U5UgU~f~{RRHzV<7b3GN0nLV7}SJ+Q%eKyvWpwwhvf_ znS7cwT6Dr~mRkOm5Q^Esbja7HGO%Bu#rm8Ep{rh|_?>DsSF4lJyyt^^K<($4nBs;7 zUJ1kfk9OKFdp@ak*wmD|nl7ZFJEk(PWc&RhY2e=mBWX~o)I0eKX6mm$N%jt-8Lu5& z>PE6WZyWm4lF;JuNc??rjm&wS}9wWTilb?(7XVlmuzqpQv&mEul)HmKoM&UmI*8fi&!wR*#aX4;Zp zB9fh%s5C1Yuoj$4>KJ_Br@nW2jc6Qr=vp^~g-M!{NOV0hy2-SjvfXD%h(=r3K9=d^ zhKFX-Na6opFIx0bJ>G2PucQ2AF5Ic<+0DRMsnGS!xjZ=97Gvb~dfur_@etKVLjt_h z7Pw}?-MlWoc<#6GFdkYh_Dr5INrH);n1RRR(*IM_X({6~H^WZlbL#a)&(GF0-lltC z7oc=$cWUW@kNPFkKH007T8_`GCw)6!m{yN6>G`PeRV#TZ^WU2BixP8*`}+W~D+>8ut1Aapcj zh=@X?1c#SRwN5>yUCF6C8nP_boLd6|>Q)77xu`id^qEQ!cx-yz{H)>VeF$eUlA1!8 zRl019%FY_S%EA8&Nm{`)CAcYek99{P|JQc4CL3B>V{|@0AZB#cJyX)F8oHL~y_KXm zd3-R2`oW2-H6r{&s~@M+=l2QnLO5}x7*WT7sSLCSVK5o&HrYXZsrrIsh3c@ZWz)q=Bo9f%@C^IVR4%RdxTf0c$>M)yYb>h?Yd29rKmTWQQU%jHt%*pfpl&IZ) zLGMWHJK2u&ChR82g(ceuCjJU{q7kvdupJ3}b8UP7y#Xj@JaEKav7_m(^;rkq{LygI zV-d?<*D1y@*ZzoV=Mv%$NlD@;$j7d*YJZ10aGngW+q*-~m8e3pRSv~=F2|lCS2#bv z#4^`TM7G6rba(o=-qeSDIVbukbJ{SKyz6gItiL(8k@rY;vV^9nR?XSzzY?%Fo8)Tx zKE`)q2uV)v!h8+&B1)PZs@kd3c2IBq*gbewm!39LM5=pJNm~PlszM~7ztDc9*waGU zcRRjxi*JUMp1tK-rt0z(6UE<@3Yp5D0?ssZRS9m`wC(PY5-wd5lOk!06+c<&#B7Yg zh3lEmus=_8929E3jiWvZgvJ7YUVG}?aiiycZ6^D9XHGTy=ZgFc6oh$dEErHuI(AqG zjuRkD9fWoOqHd-e3rK2g0GCe&Ht*_Fo`}7AhAUI}dU0UH1gr(7j$Ed3`$8Ss)b0bD zp4tN*T?cLrtLSk~9-nYb0uKL5H^vT>hR)wQh`{_yt+!9{Njk;z-?`?OF?i5t z0wiD_M?I{V{MdE=ocYCDo{am0ZyM2eS9DV(U!NXN$P2Ivdr|~Vrjvl`|&xfXwa)VS)ixG_lp4KD# zn!XajSSe|(`}1muUmNxF-S|@HH~*TjS88h`(s^~Z+QeU4@-k*#93n=FdR;Gbg*jyi z_=UpIM39F7_MmhS7~Zg$VS|F(|i? z!_h8neXcOqgI=vaftgsOe_)ROoTmKi`4tk{EL?ZKYWZHM=z5PeSTU-HyFvur;8&VI zJ7iD5Gig=h z=d6b+ZCD*A^qA?PQpBXELzb;;4_XYfYp(p*U52NyQ(RI!km zuxIp`lO)b5+z>Q%Sk;Djg8htH$CphTSMDlRA+sCXdp!IUP%-*n*6gs|`3-&))SWL5 zk)(hp1I#^l5q*uL2#2+Y((M>&+Qnlc50Hu9tIr=adtAMc?5KJT3ks2m~2cqa^4hutt?Du0c!6{E=B3JmT6Bn;Nmx# z(xjUeRXyIm!`ZWU6e#>W9i6-QyV9e_~Qw1czj=4w8`Q=Lg!0kA10Wqr*WVGI4TP~PH#e!7?$RqfbA|G9rs}R43Y`A zAdN6%oMMx}@5X{?6CGzL`SL)Y9?$RYdUsEk?pNvCDA9gtp9UqD;}&V8LYex;-bjgn zFU{4i;13DM87j$BfW6SOQ- zTr9QIX48}H9{+?^-r=N^%srgs%n=vLo2wrd@G@;ei28QOj3o0r_$%&k@Yfs1R}@;! zz}z2upW#L2sj&i8L4k3RLTMr0excodt4Y7!Uu?d+UlCDpZq7Cf!wQbg#;;l3J~hu8 zowY$@9jgm9VI5D`qI1jGItU8m<6__$-Z5IpVeiWMc>_Nc<2Hue?vdYBCAitkVpvDv zrh2>LGrxC=(WX^eWj$kpWJs?DtlQ>TH>&l?=pzl8z26aH{yA0gcufp(VGFz%vDSBm zmHs#!$6>V4OIUVaeEfS8T|2xb2+beq+J&u@=Bf{w6@9qAIyKO7xWrlacS(|@QOV@{ zzJ2s!f5fK4eD?=ErVOU1;$&$U&Aq3NDY?H%H!Zj;9C%eE&D<1o$-(z%_dweGZoTH9 zL~nKrIwFH470XO8&GPkDpz!WdMHAs@5a&6?EL)FHH$+HTW#Ko*h2@V#!I7+^xzEfC z=?~5!N59(WhRRd}T^2jZXTq)#JN4~Hjvj%3YM~}!p0D4+R}D}PdkK34N61M|wKdgm zd$jlD0ar5Ee`NS7TPouJ@0))ad5<4_yLP82okMM;kPP}stE#?@i2gom+44(!V6HlE zwxHW;z8hkiM=({M3$Lw+;2%TAEhaCIpVWOEQ`Mv@of@?64pg8 z@@Fa&UJ3X1BF4nwXDZXYs+oK(DVuEMw-pPa#$wmIx6Z7~YqNB&g#!mjztO5pu4GdPE6M_0( zdK3XiUVD4{&!0bmsy_m!fPesABn>a`O#lj9;r^$6w}%V?*AL{P25M@P%Z(uTgwfH_ zI;-(N83J{YDoXpPs^5)hxw+kje$WiWl7}VZzF7r~|JfNy)~+`4f2|$~X^0h-u&~%U z-yTT#@uNS6^t}?rujl;vBb97X7OV&|-(wE4SkKpYA?jDS+(cuGbyjw^wzS}kl#~UL zHj5xcjJm~)goFeb43?6@Z_@pivBB4aB~<;2#n#rAlZ$KTi?^htq@Q1VS0H)^8zKP+ z>8oV0xGDsKLq?XBm9^Hvw*RhhKN5&1pjA~>ym-2&yZa41JWx;)77Z)D&JtT zqf#Xd0ll7{P8iv_@DdiyCdY6#W?SV-A2Y3KE-EUjsZpa%D4n&w0%F4>N2V&F5c5#`synH-PkPpN?K^*TUvXRiywaaHw5#Y`9 z!T{*yfsj8YRQXDn{oz0S3-Htb10nPOS04XwoF)h^WYT)(z|EO_n*1&OJ9hCDeizDw zAz_bW9VcQ=cHnskNYdPJ9DV=!_P?o{2SV9=HF_MP=>Ag{4QecRvtW31Rg|1t?~5V2 zd%u?f^1$N^>lz((b@e;H082~SbNkcV^*}Lzxac$e`t>VE>L^foMi;&NWm@CL%+AG? zFuo@SO!uFNz47e5%X`299^n5E=tf&#|1pfGUMv(|+^Np}NDHb8DBE?bRHGO}G9VxT zArx-ld?P%2zoa!# z!;eXf6@5VJVTY=knr=lAa)r+)y0on1<>h7B`gFmW0^`zc_u|L|v(eKJ4h^|bpDxxR zQq-FdVKKteQd7NwQaWl+l|c(71`;5+m5B*)z ziC92;MTPzDXsUYY)lRbUX=gtghB!me+Q7ho)#*wLQf`OuEfxb&^zKBi6jCmbd#IqO z2tC6vruk~)?6kDQyP>H;}w8=KFQ1T0}~W2s}D@} z`H70ybG_SvI>`VwHa6X-G;Z6OlEg%uVDX>UlX-24i;lVlH8qp>D*uJ_G}yvMn(+Gj z`rI`}5Rh_k#Emyot+KpdpKoJH1UStHF(UgoeQ)fIjg7a;0ZwL%Uo`OL>8$H@4O5W> z5Cw%fZ@Lhk3;-Jqec0>$@dIm5%*@o3)v(o^GZnzN4(020n6v$F2*Y|JVq;&;^cIbS z2|wjjW8mWQ0G>`&zUe1+sweh=XlqkJ@BBKYXaT2t94|;Hdw4K^AK9UVGBPm%1WN=? zjgB&N5q}D=15r))kM#5-`4xcOVXAJwXzF^7mJ9~hvvhPQzXw$wFEvE+vxJ6(DAOiT zJx{BM$sl=qdsiB^-Rw{1AI(>zqodP(`NB^^8G9LkQnyHgi5ZN6^8USko5x8Sk6pOf z@=38gKnNuX&sFN*j`6KC>o-Or$%bPf0HDg7eW{XJ+pWxeySWM%Fo0MnC@B09F)%m( z3s6-Z?d=$n0A^!bjKd$3&F|99;U$6O?c;-0SMW!1a$%wQ^Y1r%rW~mHHKsDLO>N|$ zGn#h~cr7h0C|^wn<0yKOx`P+(Mcoe}YHFA;MN&X&K!*uYWx?PW#lr8gv3uuUz(BsV z`0Y>Rii(Q%s+e=?0vsC literal 0 HcmV?d00001 diff --git a/chap-22-Maps/imgs/maps.a1e5819d.jpg b/chap-22-Maps/imgs/maps.a1e5819d.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21077f7f403d03f71aecb98744a6d4be2e34b22f GIT binary patch literal 40350 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 F{{cySLG=It literal 0 HcmV?d00001 -- Gitee From cf6d048a1d2e7272453c8280a3f55b1b86dc95f8 Mon Sep 17 00:00:00 2001 From: = <=> Date: Fri, 11 Jun 2021 23:08:40 +0800 Subject: [PATCH 2/5] finish ch 22 --- chap-22-Maps/chapter_22.md | 72 +++++++++++++++----------------------- 1 file changed, 29 insertions(+), 43 deletions(-) diff --git a/chap-22-Maps/chapter_22.md b/chap-22-Maps/chapter_22.md index c147914..3a2c8fb 100644 --- a/chap-22-Maps/chapter_22.md +++ b/chap-22-Maps/chapter_22.md @@ -18,8 +18,7 @@ - 时间复杂度 ## 3 我们为什么需要 Map ? -在本节中,我们将详细介绍映射是如何工作的。但首先,让我们花一些时间,通过一个例子来理解为什 -么这个数据结构是有用的: +在本节中,我们将详细介绍映射是如何工作的。但首先,让我们花一些时间,通过一个例子来理解为什么这个数据结构是有用的: ### 3.0.0.1 使用 slice ```go // maps/without-maps/main.go @@ -44,8 +43,7 @@ func main() { fmt.Println(results) } ``` -我们有一个类型结构体 testScore 和一个由 testScores 元素组成的 results slice。现在让我们假设我想要检索一个叫Claire Novalingua的学 -生的分数。由于我们使用了一个 slice ,我们必须遍历每个元素来找到被搜索的项: +我们有一个类型结构体 testScore 和一个由 testScores 元素组成的 results slice。现在让我们假设我想要检索一个叫 Claire Novalingua 的学生的分数。由于我们使用了一个 slice ,我们必须遍历每个元素来找到被搜索的项: ```go for _, result := range results { if result.studentName == "Claire Novalingua" { @@ -66,7 +64,7 @@ Map 是类型为 T 的元素的无序集合,由类型 U 的唯一键进行索 Map 例子 -在前面的图(1)中,我们有一张代表足球世界杯冠军的地图。这里的 key 是年份(类型为 uint8 ), value 为 获胜国家名(类型为 string )。映射类型表示为: +在前面的图中,我们有一张代表足球世界杯冠军的 map 。这里的 key 是年份(类型为 uint8 ), value 为获胜国家名(类型为 string )。映射类型表示为: ```go map[uint8]string ``` @@ -82,15 +80,12 @@ map[keyType]elementType - 删除与特定键 (key) 一起存储的值 (value) - 检索与特定键 (key) 一起存储的值 (value) -我们再举一个例子;字典可以使用 map 来存储。在字典中,我们存储的单词的定义。在本例中,定义是 map 中的值 (value),单词表示键 (key)。 -当你使用字典时,你搜索一个特定的单词来得到它的定义。我们不会根据定义查字典,这种类型的查找可能会花费你很多时间,因为定义没有被 -索引。我们可以把这个类比用在 map 上。我们总是根据一个特定的键 (key) 进行查找,map 是按键 (key) 建立索引的。 +我们再举一个例子;字典可以使用 map 来存储。在字典中,我们存储的单词的定义。在本例中,定义是 map 中的值 (value),单词表示键 (key)。当你使用字典时,你搜索一个特定的单词来得到它的定义。我们不会根据定义查字典,这种类型的查找可能会花费你很多时间,因为定义没有被索引。我们可以把这个类比用在 map 上。我们总是根据一个特定的键 (key) 进行查找,map 是按键 (key) 建立索引的。 我们能否将Go中定义的所有类型都放到 map 中作为键 (key) 类型?值 (value) 类型呢? ## 5 keys: 允许使用的类型 -你不能将任何类型都作为 key 来使用。有一个限制:“作为key的类型必须完全支持比较操作符 == 和 != 的运算” 。 -因此我们排除了哪些类型? +你不能将任何类型都作为 key 来使用。有一个限制:“作为key的类型必须完全支持比较操作符 == 和 != 的运算” 。因此我们排除了哪些类型? - function - map @@ -115,12 +110,10 @@ type Test struct { ## 6 key 必须是不同的 map 中的 key 必须是不同的。 -我们可以想象,map 就像一个有许多锁着的门的走廊。每扇门背后,都有一个 value 。打开门的钥匙 (key) 是独一无二的(你可以复制钥匙,但钥匙的样式是一 -样的)。每把钥匙都能打开一扇门。钥匙和门是 1:1 的关系。 +我们可以想象,map 就像一个有许多锁着的门的走廊。每扇门背后,都有一个 value 。打开门的钥匙 (key) 是独一无二的(你可以复制钥匙,但钥匙的样式是一样的)。每把钥匙都能打开一扇门。钥匙和门是 1:1 的关系。 ## 7 Element -Element 是存储在 map 上的内容。对于元素,没有关于类型的限制。你可以存储任何你想要的东西。您还可以将另一个 map 存储到一个值中。 例如,一个 -元素可以是一个年份,一个匹配的分数,一个表示某应用程序的用户的结构体… +Element 是存储在 map 上的内容。对于元素,没有关于类型的限制。你可以存储任何你想要的东西。您还可以将另一个 map 存储到一个值中。 例如,一个元素可以是一个年份,一个匹配的分数,一个表示某应用程序的用户的结构体… ## 8 如何建立一个 map ### 8.1 使用内置函数 make @@ -130,8 +123,7 @@ Element 是存储在 map 上的内容。对于元素,没有关于类型的限 m:=make(map[string]int) ``` -`m` 会是一个 `map[string]int` 类型的值,这被称为映射值,在内部它是一个指向哈希表的指针。我们将在下一节中了解什么是哈希表, -所以现在不要担心它。 +`m` 会是一个 `map[string]int` 类型的值,这被称为映射值,在内部它是一个指向哈希表的指针。我们将在下一节中了解什么是哈希表,所以现在不要担心它。 ### 8.2 使用 map 字面量语法 使用前面的语法,我们初始化并分配映射。但是我们没有填充它。我们可以使用map文字语法直接填充它: @@ -144,8 +136,7 @@ worldCupWinners := map[int]string{ fmt.Println(worldCupWinners) //map[1930:Uruguay 1934:Italy 1938:Italy 1950:Uruguay] ``` -在前面的代码清单中,我们创建了一个名为 `worldCupWinners` 的地图。这个映射直接由四个条目填充。世界杯足球比赛的前四名冠军。这里的键是整数; -它们代表年份。这些值是字符串,表示在给定年份赢得奖杯的国家的名称。1930年是乌拉圭赢得了奖杯。 +在前面的代码清单中,我们创建了一个名为 `worldCupWinners` 的 map 。这个映射直接由四个条目填充。世界杯足球比赛的前四名冠军。这里的键是整数;它们代表年份。这些值是字符串,表示在给定年份赢得奖杯的国家的名称。1930年是乌拉圭赢得了奖杯。 请注意,值可以重复。意大利和乌拉圭的值重复了两次,这是完全可以的。 @@ -241,7 +232,7 @@ hash table - **key** 被传递给哈希函数。哈希函数将返回哈希值。 - 根据哈希值,我们可以获取到桶 id -- 然后Go将遍历桶元素,以找到存储键和元素的位置。 +- 然后 Go 将遍历桶元素,以找到存储键和元素的位置。 - 当键已经存在时,Go将覆盖元素的值。 @@ -254,7 +245,7 @@ Go hashmap 实现 ### 12.0.0.1 示例应用 - 您被要求为人力资源部门构建一个应用程序 -- 在alpha版本中,我们将通过CSV文件加载员工列表 +- 在 alpha 版本中,我们将通过CSV文件加载员工列表 - 用户需要通过员工的 `eid` (由字母和数字组成)查询员工 - 例如:V45657 ,V45658... @@ -324,9 +315,7 @@ func main() { 之后,我们使用 `csv` 包。我们用 `r:= csv.NewReader(file)` 创建一个 reader ,它将允许我们逐行读取文件。我们初始化一个行计数器来跟踪行号。 -然后用 `for` 循环开始读取。我们用`record, err:= r.Read()` 读取新的一行。`record`变量是字符串(`[]string`)的一个片段。接下来,我们检查错 -误,`r.Read()`将产生一个`err`当它读取到文件末尾`io.EOF`时。我们必须在检查`err != nil`之前先检查这个。如果我们已经到达文件的末尾,我们将用 -关键字 `break` 停止 `for` 循环。之后,我们就可以读取文件的数据了。 +然后用 `for` 循环开始读取。我们用`record, err:= r.Read()` 读取新的一行。`record`变量是字符串(`[]string`)的一个片段。接下来,我们检查错误,`r.Read()`将产生一个`err`当它读取到文件末尾`io.EOF`时。我们必须在检查`err != nil`之前先检查这个。如果我们已经到达文件的末尾,我们将用关键字 `break` 停止 `for` 循环。之后,我们就可以读取文件的数据了。 变量`record`将返回,例如`[V45657 John Ollivero M CEO]`。 @@ -355,19 +344,19 @@ employee := employee{ employees[employeeId] = employee ``` -要添加一个键和一个元素组成的对,只需使用下面的语法: +要添加一个键和一个元素组成的对,只需使用下面的语法: ```go m[key]=value ``` ## 14 检索一个值 -要从map中获取元素,你必须知道它对应的key。有两种不同的方法来实现这个操作: +要从map中获取元素,你必须知道它对应的key。有两种不同的方法来实现这个操作: ### 14.0.1 短语法 假设您正在寻找与雇员 3 相关的数据。 -你将通过调用以下语句来检索值 (struct employee) : +你将通过调用以下语句来检索值 (struct employee): ```go walter := employees["V6555"] ``` @@ -389,8 +378,7 @@ fmt.Println(reflect.TypeOf(ghost)) 该键在 map 上不存在。**Go将返回该类型的空值。** #### 14.0.2.1 警告!要非常小心这种语法,因为它可能会导致错误。 -在我们的 HR 软件示例中,假设在将数据加载到 map 中之后,您向用户建议某种类型的界面,在那里他们可以通过 id 查看员工的数据。如果用户输 -入 id "100" 会怎样?对于这些不存在的键,map 会返回一个空对象 `employee`。 +在我们的 HR 软件示例中,假设在将数据加载到 map 中之后,您向用户建议某种类型的界面,在那里他们可以通过 id 查看员工的数据。如果用户输入 id "100" 会怎样?对于这些不存在的键,map 会返回一个空对象 `employee`。 我们可以猜测这个员工不存在,但不是100%肯定,因为这些空字段也可能来自已经损坏的文件。 @@ -401,11 +389,11 @@ fmt.Println(reflect.TypeOf(ghost)) ```go v, ok := myMap[k] ``` -变量`ok`是一个布尔值,用于指示映射中 键-值对 的存在: +变量`ok`是一个布尔值,用于指示映射中 键-值对 的存在: -键值对存在于映射中,**v** 被赋值为键 **k** 处的值 +- 键值对存在于映射中,**v** 被赋值为键 **k** 处的值。 -键值对不存在,**v** 被赋值为 valueType 类型的空值 +- 键值对不存在,**v** 被赋值为 valueType 类型的空值。 你经常会看到这样的写法: ```go @@ -419,7 +407,7 @@ if ok { } ``` -如果你只是想测试一个键是否存在于 map 中,那么可以忽略这个值: +如果你只是想测试一个键是否存在于 map 中,那么可以忽略这个值: ```go // ignore the value retrieved _, ok := employees["ABC3"] @@ -431,7 +419,7 @@ if ok { ``` 在前面的例子中,我们告诉编译器,我们不需要这个在赋值中使用了下划线 ("_") 字符检索到的值。 -有一种更短的方法来实现相同的操作: +有一种更短的方法来实现相同的操作: ```go // shorter code @@ -455,7 +443,7 @@ fmt.Printf("address of the100 %p", &employeeMap[100]) ./main.go:66:14: cannot take the address of employeeMap[100] ``` 为什么会这样呢?因为 Go 可以在添加新键值对时改变键值对的内存位置。Go将在内部执行此操作,以保持检索键-值对的复杂性不变。因此,地址 -可能会失效。Go倾向于禁止访问一个可能无效的地址,而不是让您尝试。这是一件好事! +可能会失效。Go倾向于禁止访问一个可能无效的地址,而不是让您尝试。这是一件好事! ### 14.0.5 内存使用情况的考虑 @@ -464,7 +452,7 @@ fmt.Printf("address of the100 %p", &employeeMap[100]) ## 15 删除条目 -可以使用内置的 delete 函数删除键值对。该函数有以下函数声明: +可以使用内置的 delete 函数删除键值对。该函数有以下函数声明: ```go func delete(m map[Type]Type1, key Type) ``` @@ -488,7 +476,7 @@ delete(employees, "ABC4") key 为 "ABC4" 的条目如果存在,将从 map 中被删除。 ## 16 Length -你可以使用内置函数 **len** 来检索 map 中的条目数: +你可以使用内置函数 **len** 来检索 map 中的条目数: ```go fmt.Println(len(employees)) // 3 @@ -515,7 +503,7 @@ for k, v := range employeeMap { ### 17.0.1 不要依赖迭代顺序! 注意,此代码段返回的元素序列,并非按照插入顺序排序。 -这是因为 map 中的顺序是没有保证的,如果我们尝试第二次运行相同的代码,我们可能会得到以下结果: +这是因为 map 中的顺序是没有保证的,如果我们尝试第二次运行相同的代码,我们可能会得到以下结果: ```go Key: V45657 - Value: {John Ollivero M CEO} Key: V45658 - Value: {Frane Elindo F CTO} @@ -524,16 +512,15 @@ Key: V6555 - Value: {Walter Van Der Bolstenberg M Sales Manager} 请记住这一点,因为它可能是错误的来源。 ### 17.0.2 排序问题的解决方案 -可以通过使用另一个变量来存储插入顺序来解决这个排序问题。如果顺序对你很重要,你可以使用这个解决方案: +可以通过使用另一个变量来存储插入顺序来解决这个排序问题。如果顺序对你很重要,你可以使用这个解决方案: ```go order := []string{} order = append(order, employeeID) employeeMap[employeeID] = employee ``` -在这里,我们创建了一个 slice `order`。这个 slice 将按插入顺序将键存储下来。因此,每次向 map 添加条目时,我们都通过调 -用`order = append(order, employeeID)`向 slice 添加键。 +在这里,我们创建了一个 slice `order`。这个 slice 将按插入顺序将键存储下来。因此,每次向 map 添加条目时,我们都通过调用`order = append(order, employeeID)`向 slice 添加键。 -这样,我们就可以按照插入的顺序获取条目: +这样,我们就可以按照插入的顺序获取条目: ```go for _, k := range order { @@ -551,8 +538,7 @@ for _, k := range order { ![Maps](./imgs/2d_map.20011164.png) 二维 map -在图2中有两个 map 。第二个 map 的类型是 `map[string]string`。我们以键 "Name" 、 "Position" 和 "Genre" 的形式存储, -值是对应的员工数据。第一个map的类型是`map[int]map[string]string`。这个类型的表示法有点令人困惑,但当你仔细观察它时,它是有意义的: +在图2中有两个 map 。第二个 map 的类型是 `map[string]string`。我们以键 "Name" 、 "Position" 和 "Genre" 的形式存储,值是对应的员工数据。第一个map的类型是`map[int]map[string]string`。这个类型的表示法有点令人困惑,但当你仔细观察它时,它是有意义的: ![Maps](./imgs/map_inside_map.dfe70134.png) -- Gitee From dbc5f09be63ba1f37e6f34a200626da087bc7d8f Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 12 Jun 2021 11:17:31 +0800 Subject: [PATCH 3/5] fixed some problem --- chap-22-Maps/chapter_22.md | 92 +++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/chap-22-Maps/chapter_22.md b/chap-22-Maps/chapter_22.md index 3a2c8fb..54c2ebe 100644 --- a/chap-22-Maps/chapter_22.md +++ b/chap-22-Maps/chapter_22.md @@ -1,7 +1,7 @@ # Chapter 22: Maps ![Maps](./imgs/maps.a1e5819d.jpg) -## 1 你将在本章学到什么 +## 1 您将在本章学到什么 - map 是什么? - 什么是 key, 什么是 value? @@ -18,7 +18,7 @@ - 时间复杂度 ## 3 我们为什么需要 Map ? -在本节中,我们将详细介绍映射是如何工作的。但首先,让我们花一些时间,通过一个例子来理解为什么这个数据结构是有用的: +在本节中,我们将详细介绍 map 是如何工作的。但首先,让我们花一些时间,通过一个例子来理解为什么这个数据结构是有用的: ### 3.0.0.1 使用 slice ```go // maps/without-maps/main.go @@ -43,7 +43,7 @@ func main() { fmt.Println(results) } ``` -我们有一个类型结构体 testScore 和一个由 testScores 元素组成的 results slice。现在让我们假设我想要检索一个叫 Claire Novalingua 的学生的分数。由于我们使用了一个 slice ,我们必须遍历每个元素来找到被搜索的项: +我们有一个类型结构体 `testScore` 和一个由 `testScore` 元素组成的 `results` slice。现在让我们假设我想要检索一个叫 Claire Novalingua 的学生的分数。由于我们使用了一个 slice ,我们必须遍历每个元素来找到被搜索的项: ```go for _, result := range results { if result.studentName == "Claire Novalingua" { @@ -53,7 +53,7 @@ for _, result := range results { ``` 为什么这个解决方案不是最优的? -- 我们必须潜在地遍历切片的所有元素。想象一下你的 slice 包含了数千个元素!这对性能会产生很大影响。 +- 我们必须潜在地遍历切片的所有元素。想象一下您的 slice 包含了数千个元素!这对性能会产生很大影响。 - 所写的代码不短。我们使用 for 循环范围和嵌套比较。这五行代码不容易读懂。 ## 4 Map 是什么? @@ -64,7 +64,7 @@ Map 是类型为 T 的元素的无序集合,由类型 U 的唯一键进行索 Map 例子 -在前面的图中,我们有一张代表足球世界杯冠军的 map 。这里的 key 是年份(类型为 uint8 ), value 为获胜国家名(类型为 string )。映射类型表示为: +在前面的图中,我们有一张代表足球世界杯冠军的 map 。这里的 key 是年份(类型为 `uint8` ), value 为获胜国家名(类型为 `string` )。map 类型表示为: ```go map[uint8]string ``` @@ -74,24 +74,24 @@ map 的元素称为 "map entry"。它通常也被命名为 key-value pair (键 ```go map[keyType]elementType ``` -使用 map ,你可以执行以下操作: +使用 map ,您可以执行以下操作: - 使用特定键 (key) 存储值 (value) - 删除与特定键 (key) 一起存储的值 (value) - 检索与特定键 (key) 一起存储的值 (value) -我们再举一个例子;字典可以使用 map 来存储。在字典中,我们存储的单词的定义。在本例中,定义是 map 中的值 (value),单词表示键 (key)。当你使用字典时,你搜索一个特定的单词来得到它的定义。我们不会根据定义查字典,这种类型的查找可能会花费你很多时间,因为定义没有被索引。我们可以把这个类比用在 map 上。我们总是根据一个特定的键 (key) 进行查找,map 是按键 (key) 建立索引的。 +我们再举一个例子:字典可以使用 map 来存储。在字典中,我们存储的单词的定义。在本例中,定义是 map 中的值 (value),单词表示键 (key)。当您使用字典时,您搜索一个特定的单词来得到它的定义。我们不会根据定义查字典,这种类型的查找可能会花费您很多时间,因为定义没有被索引。我们可以把这个类比用在 map 上。我们总是根据一个特定的键 (key) 进行查找,map 是按键 (key) 建立索引的。 我们能否将Go中定义的所有类型都放到 map 中作为键 (key) 类型?值 (value) 类型呢? ## 5 keys: 允许使用的类型 -你不能将任何类型都作为 key 来使用。有一个限制:“作为key的类型必须完全支持比较操作符 == 和 != 的运算” 。因此我们排除了哪些类型? +您不能将任何类型都作为 key 来使用。有一个限制:“作为key的类型必须完全支持比较操作符 `==` 和 `!=` 的运算” 。因此我们排除了哪些类型? - function - map - slice -- 由 function ,map 或 slice 组成的数组 -- 包含 function , map 或 slice 的字段的结构体类型 +- 由 function,map 或 slice 组成的数组 +- 包含 function, map 或 slice 的字段的结构体类型 ```go // FORBIDDEN: an array of slices @@ -110,23 +110,23 @@ type Test struct { ## 6 key 必须是不同的 map 中的 key 必须是不同的。 -我们可以想象,map 就像一个有许多锁着的门的走廊。每扇门背后,都有一个 value 。打开门的钥匙 (key) 是独一无二的(你可以复制钥匙,但钥匙的样式是一样的)。每把钥匙都能打开一扇门。钥匙和门是 1:1 的关系。 +我们可以想象,map 就像一个有许多锁着的门的走廊。每扇门背后,都有一个 value 。打开门的钥匙 (key) 是独一无二的(您可以复制钥匙,但钥匙的样式是一样的)。每把钥匙都能打开一扇门。钥匙和门是 1:1 的关系。 ## 7 Element -Element 是存储在 map 上的内容。对于元素,没有关于类型的限制。你可以存储任何你想要的东西。您还可以将另一个 map 存储到一个值中。 例如,一个元素可以是一个年份,一个匹配的分数,一个表示某应用程序的用户的结构体… +Element 是存储在 map 上的内容。对于 element,没有关于类型的限制。您可以存储任何您想要的东西。您还可以将另一个 map 存储到一个值中。 例如,一个 element 可以是一个年份,一场比赛的分数,一个表示某应用程序的用户的结构体… ## 8 如何建立一个 map ### 8.1 使用内置函数 make -你可以使用make内置函数来分配和初始化一个新 map: +您可以使用 `make` 内置函数来分配和初始化一个新 map: ```go m:=make(map[string]int) ``` -`m` 会是一个 `map[string]int` 类型的值,这被称为映射值,在内部它是一个指向哈希表的指针。我们将在下一节中了解什么是哈希表,所以现在不要担心它。 +`m` 会是一个 `map[string]int` 类型的值,这被称为 map 值,在内部它是一个指向哈希表的指针。我们将在下一节中了解什么是哈希表,所以现在不要担心它。 ### 8.2 使用 map 字面量语法 -使用前面的语法,我们初始化并分配映射。但是我们没有填充它。我们可以使用map文字语法直接填充它: +使用前面的语法,我们初始化并分配 map 。但是我们没有填充它。我们可以使用 map 字面量语法直接填充它: ```go worldCupWinners := map[int]string{ 1930: "Uruguay", @@ -136,13 +136,13 @@ worldCupWinners := map[int]string{ fmt.Println(worldCupWinners) //map[1930:Uruguay 1934:Italy 1938:Italy 1950:Uruguay] ``` -在前面的代码清单中,我们创建了一个名为 `worldCupWinners` 的 map 。这个映射直接由四个条目填充。世界杯足球比赛的前四名冠军。这里的键是整数;它们代表年份。这些值是字符串,表示在给定年份赢得奖杯的国家的名称。1930年是乌拉圭赢得了奖杯。 +在前面的代码清单中,我们创建了一个名为 `worldCupWinners` 的 map 。这个 map 直接由四个条目填充。世界杯足球比赛的前四名冠军。这里的键是整数;它们代表年份。这些值是字符串,表示在给定年份赢得奖杯的国家的名称。1930年是乌拉圭赢得了奖杯。 请注意,值可以重复。意大利和乌拉圭的值重复了两次,这是完全可以的。 -还请注意,在初始化映射之后,还可以向其添加新值。在我们的示例中,我们可以向 map 中添加另一年! +还请注意,在初始化 map 之后,还可以向其添加新值。在我们的示例中,我们可以向 map 中添加另一年! -您还可以使用映射字面量语法来创建一个空映射。 +您还可以使用 map 字面量语法来创建一个空 map。 ```go a := map[int]string{} @@ -158,18 +158,18 @@ hash table 一个哈希表由 3 个元素组成: - **一个哈希函数**。它的作用是将键转换为唯一标识符。例如,键 1930 将被传递给哈希函数,它将返回 "4" 。 -- **索引存储**。用于在内存中保存值的一种索引存储。存储最终是用桶来组织的。每个桶可以存储特定数量的值。 +- **索引存储**。用于在内存中保存值的一种索引存储。存储最终会以**桶**的形式进行组织,每个**桶**将存储特定数量的值。 [comment]: <> (上面这里The storage is eventually organized in buckets. 翻译起来不是很顺畅) 当我们向哈希表添加键值对时,算法将执行以下步骤: 1. 使用 `key` 获取 `hash_function(key)` 的返回值(我们使用 `h` 表示返回值)。 `h` 是存储数据的索引(例如,4)。 -2. 将值存储到索引 `h` 的容器中。 +2. 将值存储到容器中索引为 `h` 的位置。 -从给定的key中检索value值也将使用哈希函数 +从给定的 key 中检索 value 值也将使用哈希函数 -1. 从值中获取返回值hash_function(key)。它将返回容器索引。 +1. `hash_function(key)`会将key的值转化为对应容器的索引并返回。 2. 从给定容器中提取数据并将其返回给用户。 [comment]: <> (这里不太对的感觉……) @@ -183,7 +183,7 @@ hash table - 如果您将键 `1989` 传递给哈希函数,它将返回,例如 `i`。 `i` 将索引的存储值与 `1989` 挂钩。 - 试想如果现在 `1938` 传递给哈希函数同样返回了 `i` ! - 当您用键 `1989` 存储一些东西时,它将删除已经为键 `1938` 存储的内容。 - - 想象一下这种碰撞会产生的混乱!例如,hash函数MD5可能产生冲突。(更多信息,请阅读文章[@stevens2006fast]) + - 想象一下这种碰撞会产生的混乱!例如,hash函数MD5可能产生冲突。(更多信息,请阅读文章[@stevens2006fast](#ref)) - 计算索引以在有限的时间内获得数据的位置。(哈希函数必须是高效的) - 产生的哈希必须及时稳定。在每次调用时,该键应该产生相同的哈希。 @@ -191,7 +191,7 @@ hash table ## 10 哈希表的时间复杂度 - 算法的复杂度是指在机器上运行它所需要的资源数量。 -- 时间复杂度是一种复杂度;它指定运行一个程序所需的计算机时间。 +- 时间复杂度是复杂度的一种;它标明了运行一个程序所需的计算机时间。 时间复杂度将取决于哈希表的实现,但是请记住,搜索值和插入新键值对的时间复杂度非常低。 @@ -244,7 +244,7 @@ Go hashmap 实现 ### 12.0.0.1 示例应用 -- 您被要求为人力资源部门构建一个应用程序 +-您被要求为人力资源部门构建一个应用程序 - 在 alpha 版本中,我们将通过CSV文件加载员工列表 - 用户需要通过员工的 `eid` (由字母和数字组成)查询员工 @@ -351,20 +351,20 @@ m[key]=value ## 14 检索一个值 -要从map中获取元素,你必须知道它对应的key。有两种不同的方法来实现这个操作: +要从 map 中获取元素,您必须知道它对应的 key。有两种不同的方法来实现这个操作: ### 14.0.1 短语法 假设您正在寻找与雇员 3 相关的数据。 -你将通过调用以下语句来检索值 (struct employee): +您将通过调用以下语句来检索值 (struct employee): ```go walter := employees["V6555"] ``` -这里,我们将映射employeeMap中包含的值赋给变量walter,键 (key) 为V6555。 +这里,我们将 map `employeeMap`中包含的值赋给变量walter,键 (key) 为V6555。 ### 14.0.2 如果 key 不存在怎么办? -但是如果这个值不存在呢?你会让你的程序陷入 panic 吗?让我们试试看: +但是如果这个值不存在呢?您会让您的程序陷入 panic 吗?让我们试试看: ```go // when there is no such pair ghost := employees["ABC55555"] @@ -389,13 +389,13 @@ fmt.Println(reflect.TypeOf(ghost)) ```go v, ok := myMap[k] ``` -变量`ok`是一个布尔值,用于指示映射中 键-值对 的存在: +变量`ok`是一个布尔值,用于指示 map 中 键-值对 的存在: -- 键值对存在于映射中,**v** 被赋值为键 **k** 处的值。 +- 键值对存在于 map 中,**v** 被赋值为键 **k** 处的值。 - 键值对不存在,**v** 被赋值为 valueType 类型的空值。 -你经常会看到这样的写法: +您经常会看到这样的写法: ```go // lookup with two values assignment employeeABC2, ok := employees["ABC2"] @@ -407,7 +407,7 @@ if ok { } ``` -如果你只是想测试一个键是否存在于 map 中,那么可以忽略这个值: +如果您只是想测试一个键是否存在于 map 中,那么可以忽略这个值: ```go // ignore the value retrieved _, ok := employees["ABC3"] @@ -431,8 +431,8 @@ if _, ok := employees["ABC4"]; ok { ``` 两个值的赋值和 ok 值的检查在一行代码中完成了! -### 14.0.4 警告!映射值是不可寻址的 -从 map 中检索的值是不可寻址的。不能打印映射值的内存地址。 +### 14.0.4 警告!map 值是不可寻址的 +从 map 中检索的值是不可寻址的。不能打印 map 值的内存地址。 例如,以下代码: ```go @@ -447,7 +447,7 @@ fmt.Printf("address of the100 %p", &employeeMap[100]) ### 14.0.5 内存使用情况的考虑 -请注意,当您保存从映射中提取的值时(如果您不再使用该 map ),Go仍然会在内存中保存整个 map 。垃圾收集器不会删除这些不再使用的内存。 +请注意,当您保存从 map 中提取的值时(如果您不再使用该 map ),Go仍然会在内存中保存整个 map 。垃圾收集器不会删除这些不再使用的内存。 ## 15 删除条目 @@ -461,14 +461,14 @@ func delete(m map[Type]Type1, key Type) - 一个 map 作为第一个参数 - 一个 key -第二个参数是你想删除的条目的 **key**。 +第二个参数是您想删除的条目的 **key**。 - 如果该条目在 map 中不存在,它就不会陷入 panic (并且会编译)。 - 如果第二个参数使用与 key 类型不同的类型,则程序将无法编译。 举个例子: -如果你想从map `employees` 中删除索引为 2 的条目,你可以使用以下代码: +如果您想从map `employees` 中删除索引为 2 的条目,您可以使用以下代码: ```go delete(employees, "ABC4") ``` @@ -476,7 +476,7 @@ delete(employees, "ABC4") key 为 "ABC4" 的条目如果存在,将从 map 中被删除。 ## 16 Length -你可以使用内置函数 **len** 来检索 map 中的条目数: +您可以使用内置函数 **len** 来检索 map 中的条目数: ```go fmt.Println(len(employees)) // 3 @@ -491,7 +491,7 @@ fmt.Println(len(employeeMap)) ``` ## 17 遍历 map -你可以使用 for 循环和 range 子句来遍历映射的所有条目: +您可以使用 for 循环和 range 子句来遍历 map 所有条目: ```go for k, v := range employeeMap { fmt.Printf("Key: %s - Value: %s\n", k, v) @@ -512,7 +512,7 @@ Key: V6555 - Value: {Walter Van Der Bolstenberg M Sales Manager} 请记住这一点,因为它可能是错误的来源。 ### 17.0.2 排序问题的解决方案 -可以通过使用另一个变量来存储插入顺序来解决这个排序问题。如果顺序对你很重要,你可以使用这个解决方案: +可以通过使用另一个变量来存储插入顺序来解决这个排序问题。如果顺序对您很重要,您可以使用这个解决方案: ```go order := []string{} order = append(order, employeeID) @@ -538,7 +538,7 @@ for _, k := range order { ![Maps](./imgs/2d_map.20011164.png) 二维 map -在图2中有两个 map 。第二个 map 的类型是 `map[string]string`。我们以键 "Name" 、 "Position" 和 "Genre" 的形式存储,值是对应的员工数据。第一个map的类型是`map[int]map[string]string`。这个类型的表示法有点令人困惑,但当你仔细观察它时,它是有意义的: +在图2中有两个 map 。第二个 map 的类型是 `map[string]string`。我们以键 "Name" 、 "Position" 和 "Genre" 的形式存储,值是对应的员工数据。第一个map的类型是`map[int]map[string]string`。这个类型的表示法有点令人困惑,但当您仔细观察它时,它是有意义的: ![Maps](./imgs/map_inside_map.dfe70134.png) @@ -576,7 +576,7 @@ map 的值是另一个 map 1. 因为比较操作符 == 和 != 并没有为这些类型完全定义。Go 需要能够在其内部实现中比较键。 5. 当您遍历 map 时,运行时将按您插入键和元素的顺序返回键和元素。对还是错? - 1. 错的,map 是一个无序的集合。Go 不保留插入顺序的记忆。如果你需要它,你必须自己保存它。 + 1. 错的,map 是一个无序的集合。Go 不保留插入顺序的记忆。如果您需要它,您必须自己保存它。 6. 怎样从 map 中删除一个 key-value 对? 1. `delete(employees, "ABC4")`,当没有找到对应的 key 时,什么也不会发生。 @@ -594,7 +594,7 @@ map 的值是另一个 map ## 20 主要收获 - map 是类型 V 的元素(值)的**无序**集合,由类型 K 的唯一键进行索引 - map 类型这样表示:`map[K]V` -- map 中的元素称为映射条目或键-值对。 +- map 中的元素称为 map 条目或键-值对。 - 要初始化 map ,可以使用以下语法: ```go m := make(map[string]uint8) @@ -625,7 +625,7 @@ map 的值是另一个 map m := make(map[string]uint8)// fill the map valueRetrieved := m[ "myNewKey"] ``` - - 当没有找到值时,变量`valueretrived`将等于映射值类型的 0 值。 + - 当没有找到值时,变量`valueretrived`将等于 map 值类型的 0 值。 -在这里`valueretriserved`等于 0 ( uint8 类型的 0 值) ```go @@ -658,4 +658,4 @@ map 的值是另一个 map 5. You can find more info about this notation on this Wikipedia article: https://en.wikipedia.org/wiki/Big_O_notation ## Bibliography -- [stevens2006fast] Stevens, Marc. 2006. “Fast Collision Attack on Md5.” IACR Cryptology ePrint Archive 2006: 104. \ No newline at end of file +- [stevens2006fast] Stevens, Marc. 2006. “Fast Collision Attack on Md5.” IACR Cryptology ePrint Archive 2006: 104. \ No newline at end of file -- Gitee From 683dd56e4bb3c25317cee2adbcb7a5f35a82f058 Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 12 Jun 2021 15:17:01 +0800 Subject: [PATCH 4/5] fixed some problem --- chap-22-Maps/chapter_22.md | 89 +++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/chap-22-Maps/chapter_22.md b/chap-22-Maps/chapter_22.md index 54c2ebe..47b98d2 100644 --- a/chap-22-Maps/chapter_22.md +++ b/chap-22-Maps/chapter_22.md @@ -1,7 +1,7 @@ # Chapter 22: Maps ![Maps](./imgs/maps.a1e5819d.jpg) -## 1 您将在本章学到什么 +## 1 你将在本章学到什么 - map 是什么? - 什么是 key, 什么是 value? @@ -53,7 +53,7 @@ for _, result := range results { ``` 为什么这个解决方案不是最优的? -- 我们必须潜在地遍历切片的所有元素。想象一下您的 slice 包含了数千个元素!这对性能会产生很大影响。 +- 我们必须潜在地遍历切片的所有元素。想象一下你的 slice 包含了数千个元素!这对性能会产生很大影响。 - 所写的代码不短。我们使用 for 循环范围和嵌套比较。这五行代码不容易读懂。 ## 4 Map 是什么? @@ -74,18 +74,18 @@ map 的元素称为 "map entry"。它通常也被命名为 key-value pair (键 ```go map[keyType]elementType ``` -使用 map ,您可以执行以下操作: +使用 map ,你可以执行以下操作: - 使用特定键 (key) 存储值 (value) - 删除与特定键 (key) 一起存储的值 (value) - 检索与特定键 (key) 一起存储的值 (value) -我们再举一个例子:字典可以使用 map 来存储。在字典中,我们存储的单词的定义。在本例中,定义是 map 中的值 (value),单词表示键 (key)。当您使用字典时,您搜索一个特定的单词来得到它的定义。我们不会根据定义查字典,这种类型的查找可能会花费您很多时间,因为定义没有被索引。我们可以把这个类比用在 map 上。我们总是根据一个特定的键 (key) 进行查找,map 是按键 (key) 建立索引的。 +我们再举一个例子:字典可以使用 map 来存储。在字典中,我们存储的单词的定义。在本例中,定义是 map 中的值 (value),单词表示键 (key)。当你使用字典时,你搜索一个特定的单词来得到它的定义。我们不会根据定义查字典,这种类型的查找可能会花费你很多时间,因为定义没有被索引。我们可以把这个类比用在 map 上。我们总是根据一个特定的键 (key) 进行查找,map 是按键 (key) 建立索引的。 我们能否将Go中定义的所有类型都放到 map 中作为键 (key) 类型?值 (value) 类型呢? ## 5 keys: 允许使用的类型 -您不能将任何类型都作为 key 来使用。有一个限制:“作为key的类型必须完全支持比较操作符 `==` 和 `!=` 的运算” 。因此我们排除了哪些类型? +你不能将任何类型都作为 key 来使用。有一个限制:“作为key的类型必须完全支持比较操作符 `==` 和 `!=` 的运算” 。因此我们排除了哪些类型? - function - map @@ -110,15 +110,15 @@ type Test struct { ## 6 key 必须是不同的 map 中的 key 必须是不同的。 -我们可以想象,map 就像一个有许多锁着的门的走廊。每扇门背后,都有一个 value 。打开门的钥匙 (key) 是独一无二的(您可以复制钥匙,但钥匙的样式是一样的)。每把钥匙都能打开一扇门。钥匙和门是 1:1 的关系。 +我们可以想象,map 就像一个有许多锁着的门的走廊。每扇门背后,都有一个 value 。打开门的钥匙 (key) 是独一无二的(你可以复制钥匙,但钥匙的样式是一样的)。每把钥匙都能打开一扇门。钥匙和门是 1:1 的关系。 ## 7 Element -Element 是存储在 map 上的内容。对于 element,没有关于类型的限制。您可以存储任何您想要的东西。您还可以将另一个 map 存储到一个值中。 例如,一个 element 可以是一个年份,一场比赛的分数,一个表示某应用程序的用户的结构体… +Element 是存储在 map 上的内容。对于 element,没有关于类型的限制。你可以存储任何你想要的东西。你还可以将另一个 map 存储到一个值中。 例如,一个 element 可以是一个年份,一场比赛的分数,一个表示某应用程序的用户的结构体… ## 8 如何建立一个 map ### 8.1 使用内置函数 make -您可以使用 `make` 内置函数来分配和初始化一个新 map: +你可以使用 `make` 内置函数来分配和初始化一个新 map: ```go m:=make(map[string]int) ``` @@ -142,7 +142,7 @@ fmt.Println(worldCupWinners) 还请注意,在初始化 map 之后,还可以向其添加新值。在我们的示例中,我们可以向 map 中添加另一年! -您还可以使用 map 字面量语法来创建一个空 map。 +你还可以使用 map 字面量语法来创建一个空 map。 ```go a := map[int]string{} @@ -180,9 +180,9 @@ hash table - 避免哈希碰撞: - - 如果您将键 `1989` 传递给哈希函数,它将返回,例如 `i`。 `i` 将索引的存储值与 `1989` 挂钩。 + - 如果你将键 `1989` 传递给哈希函数,它将返回,例如 `i`。 `i` 将索引的存储值与 `1989` 挂钩。 - 试想如果现在 `1938` 传递给哈希函数同样返回了 `i` ! - - 当您用键 `1989` 存储一些东西时,它将删除已经为键 `1938` 存储的内容。 + - 当你用键 `1989` 存储一些东西时,它将删除已经为键 `1938` 存储的内容。 - 想象一下这种碰撞会产生的混乱!例如,hash函数MD5可能产生冲突。(更多信息,请阅读文章[@stevens2006fast](#ref)) - 计算索引以在有限的时间内获得数据的位置。(哈希函数必须是高效的) @@ -240,13 +240,13 @@ hash table Go hashmap 实现 ## 12 使用示例 -在本节中,我们将看一下您可以在 map 上进行的最常见的操作。 为此,我们将使用一个例子。 +在本节中,我们将看一下你可以在 map 上进行的最常见的操作。 为此,我们将使用一个例子。 ### 12.0.0.1 示例应用 --您被要求为人力资源部门构建一个应用程序 +-你被要求为人力资源部门构建一个应用程序 - 在 alpha 版本中,我们将通过CSV文件加载员工列表 -- 用户需要通过员工的 `eid` (由字母和数字组成)查询员工 +- 用户需要通过员工的 `employeeId` (由字母和数字组成)查询员工 - 例如:V45657 ,V45658... @@ -264,10 +264,10 @@ V6555,Walter Van Der Bolstenberg,M,Sales Manager - 我们将根据唯一的 key 查询员工 - 这个id不是一个整数;我们可以用 slice 或 map 。 -我们选择使用 map ;创建一个 `employee` 类型。 +我们会使用一个 map ,并且我们会创建一个`employee`类型。 - Keys: employeeId => string -- Elements : values of type employee +- Elements : 类型`employee`里的值 ### 12.0.0.3 从CSV读取数据 @@ -309,13 +309,13 @@ func main() { 第一步是打开 `employees.csv` 文件。 -我们使用的是标准库 `os` 。与往常一样,我们检查错误并返回一些错误(但在返回之前,我们打印一个错误消息)。 +我们使用的是标准库 `os` 。与往常一样,我们检查错误,如果有任何错误会返回它们(但在返回之前,会先将错误信息打印)。 [@_@]: # (原文 we check for errors and return if they are some(but before returning, we are printing an error message) 之后,我们使用 `csv` 包。我们用 `r:= csv.NewReader(file)` 创建一个 reader ,它将允许我们逐行读取文件。我们初始化一个行计数器来跟踪行号。 -然后用 `for` 循环开始读取。我们用`record, err:= r.Read()` 读取新的一行。`record`变量是字符串(`[]string`)的一个片段。接下来,我们检查错误,`r.Read()`将产生一个`err`当它读取到文件末尾`io.EOF`时。我们必须在检查`err != nil`之前先检查这个。如果我们已经到达文件的末尾,我们将用关键字 `break` 停止 `for` 循环。之后,我们就可以读取文件的数据了。 +然后用 `for` 循环开始读取。我们用`record, err:= r.Read()` 读取新的一行。`record`变量是字符串(`[]string`)的一个 slice。接下来,我们检查错误,一点细微的差别是,当读至文件末尾结束,`r.Read()` 会使用 `io.EOF` 填充`err`。我们必须在检查`err != nil`之前先检查这个。如果我们已经到达文件的末尾,我们将用关键字 `break` 停止 `for` 循环。之后,我们就可以读取文件的数据了。 变量`record`将返回,例如`[V45657 John Ollivero M CEO]`。 @@ -351,12 +351,12 @@ m[key]=value ## 14 检索一个值 -要从 map 中获取元素,您必须知道它对应的 key。有两种不同的方法来实现这个操作: +要从 map 中获取元素,你必须知道它对应的 key。有两种不同的方法来实现这个操作: ### 14.0.1 短语法 -假设您正在寻找与雇员 3 相关的数据。 +假设你正在寻找与雇员 3 相关的数据。 -您将通过调用以下语句来检索值 (struct employee): +你可以通过调用以下语句来检索值 (struct employee): ```go walter := employees["V6555"] ``` @@ -364,7 +364,7 @@ walter := employees["V6555"] 这里,我们将 map `employeeMap`中包含的值赋给变量walter,键 (key) 为V6555。 ### 14.0.2 如果 key 不存在怎么办? -但是如果这个值不存在呢?您会让您的程序陷入 panic 吗?让我们试试看: +但是如果这个值不存在呢?你会让你的程序陷入 panic 吗?让我们试试看: ```go // when there is no such pair ghost := employees["ABC55555"] @@ -378,7 +378,7 @@ fmt.Println(reflect.TypeOf(ghost)) 该键在 map 上不存在。**Go将返回该类型的空值。** #### 14.0.2.1 警告!要非常小心这种语法,因为它可能会导致错误。 -在我们的 HR 软件示例中,假设在将数据加载到 map 中之后,您向用户建议某种类型的界面,在那里他们可以通过 id 查看员工的数据。如果用户输入 id "100" 会怎样?对于这些不存在的键,map 会返回一个空对象 `employee`。 +在我们的 HR 软件示例中,假设在将数据加载到 map 中之后,你向用户提供某种类型的接口,在那里他们可以通过 id 查看员工的数据。如果用户输入 id "100" 会怎样?对于这些不存在的键,map 会返回一个空对象 `employee`。 我们可以猜测这个员工不存在,但不是100%肯定,因为这些空字段也可能来自已经损坏的文件。 @@ -393,9 +393,9 @@ v, ok := myMap[k] - 键值对存在于 map 中,**v** 被赋值为键 **k** 处的值。 -- 键值对不存在,**v** 被赋值为 valueType 类型的空值。 +- 键值对不存在,**v** 被赋值为值类型的空值。 -您经常会看到这样的写法: +你经常会看到这样的写法: ```go // lookup with two values assignment employeeABC2, ok := employees["ABC2"] @@ -407,7 +407,7 @@ if ok { } ``` -如果您只是想测试一个键是否存在于 map 中,那么可以忽略这个值: +如果你只是想测试一个键是否存在于 map 中,那么可以忽略这个值: ```go // ignore the value retrieved _, ok := employees["ABC3"] @@ -417,7 +417,7 @@ if ok { fmt.Printf("No employee with ID 'ABC3'") } ``` -在前面的例子中,我们告诉编译器,我们不需要这个在赋值中使用了下划线 ("_") 字符检索到的值。 +在前面的例子中,我们通过使用下划线 (_) 来告诉编译器,这里我们不需要检索到的值。 有一种更短的方法来实现相同的操作: @@ -442,12 +442,11 @@ fmt.Printf("address of the100 %p", &employeeMap[100]) ```go ./main.go:66:14: cannot take the address of employeeMap[100] ``` -为什么会这样呢?因为 Go 可以在添加新键值对时改变键值对的内存位置。Go将在内部执行此操作,以保持检索键-值对的复杂性不变。因此,地址 -可能会失效。Go倾向于禁止访问一个可能无效的地址,而不是让您尝试。这是一件好事! +为什么会这样呢?因为 Go 会在添加新键值对时改变键值对的内存位置。Go将在内部执行此操作,以保持检索键-值对的复杂度维持在常数级别。因此,地址可能会失效。Go倾向于禁止访问一个可能无效的地址,而不是让你尝试。这是一件好事! ### 14.0.5 内存使用情况的考虑 -请注意,当您保存从 map 中提取的值时(如果您不再使用该 map ),Go仍然会在内存中保存整个 map 。垃圾收集器不会删除这些不再使用的内存。 +请注意,当你保存从 map 中提取的值时(如果你不再使用该 map ),Go仍然会在内存中保存整个 map 。垃圾收集器不会删除这些不再使用的内存。 ## 15 删除条目 @@ -461,14 +460,14 @@ func delete(m map[Type]Type1, key Type) - 一个 map 作为第一个参数 - 一个 key -第二个参数是您想删除的条目的 **key**。 +第二个参数是你想删除的条目的 **key**。 -- 如果该条目在 map 中不存在,它就不会陷入 panic (并且会编译)。 +- 即使该条目在 map 中不存在,它也不会陷入 panic (并且能够编译)。 - 如果第二个参数使用与 key 类型不同的类型,则程序将无法编译。 举个例子: -如果您想从map `employees` 中删除索引为 2 的条目,您可以使用以下代码: +如果你想从map `employees` 中删除索引为 2 的条目,你可以使用以下代码: ```go delete(employees, "ABC4") ``` @@ -476,7 +475,7 @@ delete(employees, "ABC4") key 为 "ABC4" 的条目如果存在,将从 map 中被删除。 ## 16 Length -您可以使用内置函数 **len** 来检索 map 中的条目数: +你可以使用内置函数 **len** 来检索 map 中的条目数: ```go fmt.Println(len(employees)) // 3 @@ -491,7 +490,7 @@ fmt.Println(len(employeeMap)) ``` ## 17 遍历 map -您可以使用 for 循环和 range 子句来遍历 map 所有条目: +你可以使用 for 循环和 range 子句来遍历 map 所有条目: ```go for k, v := range employeeMap { fmt.Printf("Key: %s - Value: %s\n", k, v) @@ -512,7 +511,7 @@ Key: V6555 - Value: {Walter Van Der Bolstenberg M Sales Manager} 请记住这一点,因为它可能是错误的来源。 ### 17.0.2 排序问题的解决方案 -可以通过使用另一个变量来存储插入顺序来解决这个排序问题。如果顺序对您很重要,您可以使用这个解决方案: +可以通过使用另一个变量来存储插入顺序来解决这个排序问题。如果顺序对你很重要,你可以使用这个解决方案: ```go order := []string{} order = append(order, employeeID) @@ -531,14 +530,14 @@ for _, k := range order { 我们遍历切片顺序以获得键,然后通过调用`employees[k]`来检索条目值,其中`k`表示 map `employees`的键。 ## 18 二维 map (map 的 map) -在前面的示例中,我们希望使用结构来存储数据:`enployeeID => enployeeData` +在前面的示例中,我们希望使用结构 `enployeeID => enployeeData` 来存储数据。 -键是`employeeid`,值是结构体类型 `employee`。但假设我们不想存储一个结构体,而是存储另一个 map : +键是`employeeId`,值是结构体类型 `employee`。但假设我们不想存储一个结构体,而是存储另一个 map : ![Maps](./imgs/2d_map.20011164.png) 二维 map -在图2中有两个 map 。第二个 map 的类型是 `map[string]string`。我们以键 "Name" 、 "Position" 和 "Genre" 的形式存储,值是对应的员工数据。第一个map的类型是`map[int]map[string]string`。这个类型的表示法有点令人困惑,但当您仔细观察它时,它是有意义的: +在下图中有两个 map 。第二个 map 的类型是 `map[string]string`。我们以键 "Name" 、 "Position" 和 "Genre" 的形式存储,值是对应的员工数据。第一个map的类型是`map[int]map[string]string`。这个类型的表示法有点令人困惑,但当你仔细观察它时,它是有意义的: ![Maps](./imgs/map_inside_map.dfe70134.png) @@ -546,7 +545,7 @@ map 的值是另一个 map 第二个 map 是内部 map 。它是第一个 map 的值。这种类型的每个条目都有一个整数键,值是一个`map[string]string`。 -在我看来,二维 map 太复杂了。您可能最好使用以结构体作为值的 map 。 +在我看来,二维 map 太复杂了。你可能最好使用以结构体作为值的 map 。 ## 19 试一试 ### 19.1 问题 @@ -554,7 +553,7 @@ map 的值是另一个 map 2. Go maps 内部是如何实现的? 3. 哪些类型是禁止作为 map 的 key 来使用的? 4. 为什么这些类型被禁止作为 map 的 key 使用? -5. 当您遍历 map 时,运行时将按您插入键和元素的顺序返回键和元素。对还是错? +5. 当你遍历 map 时,运行时将按你插入键和元素的顺序返回键和元素。对还是错? 6. 怎样从 map 中删除一个 key-value 对? 7. 如何获取 map 中的 key-value 对的数量? 8. 如何遍历一个 map? @@ -562,7 +561,7 @@ map 的值是另一个 map ### 19.2 答案 1. 如何检查一个键/元素对是否在一个 map 中? - 1. 假设您想要检查map `rooms`中是否存在键为102的键/元素对,可以使用`room, ok = rooms[102]`。当 `ok` 为 true 时,这个键值对就存在。 + 1. 假设你想要检查 map `rooms`中是否存在键为102的键/元素对,可以使用`room, ok = rooms[102]`。当 `ok` 为 true 时,这个键值对就存在。 2. Go maps 内部是如何实现的? 1. 在底层,Go maps 是由哈希表实现的 @@ -575,8 +574,8 @@ map 的值是另一个 map 4. 为什么这些类型被禁止作为 map 的 key 使用? 1. 因为比较操作符 == 和 != 并没有为这些类型完全定义。Go 需要能够在其内部实现中比较键。 -5. 当您遍历 map 时,运行时将按您插入键和元素的顺序返回键和元素。对还是错? - 1. 错的,map 是一个无序的集合。Go 不保留插入顺序的记忆。如果您需要它,您必须自己保存它。 +5. 当你遍历 map 时,运行时将按你插入键和元素的顺序返回键和元素。对还是错? + 1. 错的,map 是一个无序的集合。Go 不保留插入顺序的记忆。如果你需要它,你必须自己保存它。 6. 怎样从 map 中删除一个 key-value 对? 1. `delete(employees, "ABC4")`,当没有找到对应的 key 时,什么也不会发生。 @@ -627,7 +626,7 @@ map 的值是另一个 map ``` - 当没有找到值时,变量`valueretrived`将等于 map 值类型的 0 值。 - -在这里`valueretriserved`等于 0 ( uint8 类型的 0 值) + - 在这里`valueretriserved`等于 0 ( uint8 类型的 0 值) ```go m := make(map[string]uint8) // fill the map -- Gitee From 58fca395244c7056924ba50f699a3e8474ac1e77 Mon Sep 17 00:00:00 2001 From: = <=> Date: Tue, 15 Jun 2021 10:53:00 +0800 Subject: [PATCH 5/5] fixed some problem --- chap-22-Maps/chapter_22.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/chap-22-Maps/chapter_22.md b/chap-22-Maps/chapter_22.md index 47b98d2..414aceb 100644 --- a/chap-22-Maps/chapter_22.md +++ b/chap-22-Maps/chapter_22.md @@ -136,7 +136,7 @@ worldCupWinners := map[int]string{ fmt.Println(worldCupWinners) //map[1930:Uruguay 1934:Italy 1938:Italy 1950:Uruguay] ``` -在前面的代码清单中,我们创建了一个名为 `worldCupWinners` 的 map 。这个 map 直接由四个条目填充。世界杯足球比赛的前四名冠军。这里的键是整数;它们代表年份。这些值是字符串,表示在给定年份赢得奖杯的国家的名称。1930年是乌拉圭赢得了奖杯。 +在前面列出的代码中,我们创建了一个名为 `worldCupWinners` 的 map 。这个 map 直接由四个条目填充。世界杯足球比赛的前四名冠军。这里的键是整数;它们代表年份。这些值是字符串,表示在给定年份赢得奖杯的国家的名称。1930年是乌拉圭赢得了奖杯。 请注意,值可以重复。意大利和乌拉圭的值重复了两次,这是完全可以的。 @@ -148,14 +148,14 @@ fmt.Println(worldCupWinners) a := map[int]string{} ``` -在前面的代码清单中,a是一个map(已初始化并已分配),但是其中没有存储键值对。 +在前面列出的代码中,a是一个map(已初始化并已分配),但是其中没有存储键值对。 ## 9 什么是哈希表 (hash table) ? 下面是哈希表工作原理的简化视图。(go的实现略有不同): ![Maps](./imgs/hash_table.3a049d36.png) hash table -一个哈希表由 3 个元素组成: +一个哈希表由以下元素组成: - **一个哈希函数**。它的作用是将键转换为唯一标识符。例如,键 1930 将被传递给哈希函数,它将返回 "4" 。 - **索引存储**。用于在内存中保存值的一种索引存储。存储最终会以**桶**的形式进行组织,每个**桶**将存储特定数量的值。 @@ -170,7 +170,7 @@ hash table 从给定的 key 中检索 value 值也将使用哈希函数 1. `hash_function(key)`会将key的值转化为对应容器的索引并返回。 -2. 从给定容器中提取数据并将其返回给用户。 +2. 使用索引从容器中取出数据并将其返回给用户。 [comment]: <> (这里不太对的感觉……) @@ -180,12 +180,12 @@ hash table - 避免哈希碰撞: - - 如果你将键 `1989` 传递给哈希函数,它将返回,例如 `i`。 `i` 将索引的存储值与 `1989` 挂钩。 + - 如果你将键 `1989` 传递给哈希函数,它将返回一个值,例如 `i`。 `i` 将索引的存储值与 `1989` 挂钩。 - 试想如果现在 `1938` 传递给哈希函数同样返回了 `i` ! - 当你用键 `1989` 存储一些东西时,它将删除已经为键 `1938` 存储的内容。 - 想象一下这种碰撞会产生的混乱!例如,hash函数MD5可能产生冲突。(更多信息,请阅读文章[@stevens2006fast](#ref)) -- 计算索引以在有限的时间内获得数据的位置。(哈希函数必须是高效的) +- 索引的计算要在有限的时间内得到数据的位置。(哈希函数必须是高效的) - 产生的哈希必须及时稳定。在每次调用时,该键应该产生相同的哈希。 ## 10 哈希表的时间复杂度 @@ -221,7 +221,7 @@ hash table - 这个键会被传递给**哈希函数**,它会返回一个**哈希值**(一个整数)。 - 该哈希值包含桶 id 。哈希函数不直接返回桶的 id ,返回值 `h` 必须进行转换以获得桶的 id 。 - Bucket id = 3 -- 知道桶 id 后,下一步就是在桶中找到正确的条目。这是通过将给定的键与所有桶键进行比较来完成的。 +- 知道桶 id 后,下一步就是在桶中找到正确的条目。这通过比较给定的键和“桶中所有的键”来完成。 - Key: "1930" 。Go将遍历 bucket 的键并返回相应的元素。 @@ -244,7 +244,7 @@ Go hashmap 实现 ### 12.0.0.1 示例应用 --你被要求为人力资源部门构建一个应用程序 +- 你被要求为人力资源部门构建一个应用程序 - 在 alpha 版本中,我们将通过CSV文件加载员工列表 - 用户需要通过员工的 `employeeId` (由字母和数字组成)查询员工 @@ -267,7 +267,7 @@ V6555,Walter Van Der Bolstenberg,M,Sales Manager 我们会使用一个 map ,并且我们会创建一个`employee`类型。 - Keys: employeeId => string -- Elements : 类型`employee`里的值 +- Elements : 类型为`employee`的值 ### 12.0.0.3 从CSV读取数据 @@ -309,7 +309,7 @@ func main() { 第一步是打开 `employees.csv` 文件。 -我们使用的是标准库 `os` 。与往常一样,我们检查错误,如果有任何错误会返回它们(但在返回之前,会先将错误信息打印)。 +我们使用的是标准库 `os` 。与往常一样,我们检查错误,如果有任何错误会返回它们(返回前,会先将错误信息打印)。 [@_@]: # (原文 we check for errors and return if they are some(but before returning, we are printing an error message) @@ -511,7 +511,7 @@ Key: V6555 - Value: {Walter Van Der Bolstenberg M Sales Manager} 请记住这一点,因为它可能是错误的来源。 ### 17.0.2 排序问题的解决方案 -可以通过使用另一个变量来存储插入顺序来解决这个排序问题。如果顺序对你很重要,你可以使用这个解决方案: +可以使用另一个变量存储插入时的顺序来解决排序的问题。如果顺序对你来说很重要,可以这样解决: ```go order := []string{} order = append(order, employeeID) -- Gitee