diff --git a/README.md b/README.md index fd3b81a..ae5e8b4 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 翻译进度 -8.1 [声明、初始化和 make](eBook/08.1.md) +8.2 [测试键值对是否存在及删除元素](eBook/08.2.md) ## 支持本书 diff --git a/eBook/08.2.md b/eBook/08.2.md index e8e83a1..9bf82c3 100644 --- a/eBook/08.2.md +++ b/eBook/08.2.md @@ -1,66 +1,70 @@ # 8.2 测试键值对是否存在及删除元素 -188 +测试 map1 中是否存在 key1: -测试map1中是否存在key1: +在例子 8.1 中,我们已经见过可以使用 `val1 = map1[key1]` `的方法获取 key1 对应的值 val1。如果 map 中不存在 key1,val1 就是一个值类型的空值。 -在例子8.1中,我们已经见过可以使用val1 = map1[key1]的方法获取key1对应的值val1。如果map中不存在key1,val1就是一个值类型的空值。 +这就会给我们带来困惑了:现在我们没法区分到底是 key1 不存在还是它对应的 value 就是空值。 -这就会给我们带来困惑了:现在我们没法区分到底是key1不存在还是它对应的value就是空值。 +为了解决这个问题,我们可以这么用:`val1, isPresent = map1[key1]` -为了解决这个问题,我们可以这么用: val1, isPresent = map1[key1] +isPresent 返回一个 bool 值:如果 key1 存在于 map1,val1 就是 key1 对应的 value 值,并且 isPresent为true;如果 key1 不存在,val1 就是一个空值,并且 isPresent 会返回 false。 -isPresent返回一个bool值:如果key1存在于map1,val1就是key1对应的value值,并且isPresent为true;如果key1不存在,val1就是一个空值,并且isPresent会返回false。 +如果你只是想判断某个 key 是否存在而不关心它对应的值到底是多少,你可以这么做: -如果你只是想判断某个key是否存在而不关心它对应的值到底是多少,你可以这么做: +```go +_, ok := map1[key1] // 如果key1存在则ok == true,否在ok为false +``` - _, ok := map1[key1] // 如果key1存在则ok == true,否在ok为false +或者和 if 混合使用: -或者和if混合使用: +```go +if _, ok := map1[key1]; ok { + // ... +} +``` - if _, ok := map1[key1]; ok { - // ... - } +从 map1 中删除 key1: -从map1中删除key1: +直接 `delete(map1, key1)` 就可以。 -直接: delete(map1, key1) - -如果key1不存在,该操作不会产生错误。 +如果 key1 不存在,该操作不会产生错误。 示例 8.4 [map_testelement.go](examples/chapter_8/map_testelement.go) - package main - import "fmt" +```go +package main +import "fmt" - func main() { - var value int - var isPresent bool +func main() { + var value int + var isPresent bool - map1 := make(map[string]int) - map1["New Delhi"] = 55 - map1["Beijing"] = 20 - map1["Washington"] = 25 - value, isPresent = map1["Beijing"] - if isPresent { - fmt.Printf("The value of \"Beijin\" in map1 is: %d\n", value) - } else { - fmt.Printf("map1 does not contain Beijing") - } + map1 := make(map[string]int) + map1["New Delhi"] = 55 + map1["Beijing"] = 20 + map1["Washington"] = 25 + value, isPresent = map1["Beijing"] + if isPresent { + fmt.Printf("The value of \"Beijin\" in map1 is: %d\n", value) + } else { + fmt.Printf("map1 does not contain Beijing") + } - value, isPresent = map1["Paris"] - fmt.Printf("Is \"Paris\" in map1 ?: %t\n", isPresent) - fmt.Printf("Value is: %d\n", value) + value, isPresent = map1["Paris"] + fmt.Printf("Is \"Paris\" in map1 ?: %t\n", isPresent) + fmt.Printf("Value is: %d\n", value) - // delete an item: - delete(map1, "Washington") - value, isPresent = map1["Washington"] - if isPresent { - fmt.Printf("The value of \"Washington\" in map1 is: %d\n", value) - } else { - fmt.Println("map1 does not contain Washington") - } - } + // delete an item: + delete(map1, "Washington") + value, isPresent = map1["Washington"] + if isPresent { + fmt.Printf("The value of \"Washington\" in map1 is: %d\n", value) + } else { + fmt.Println("map1 does not contain Washington") + } +} +``` 输出结果: @@ -69,7 +73,8 @@ isPresent返回一个bool值:如果key1存在于map1,val1就是key1对应的 Value is: 0 map1 does not contain Washington -##链接 +## 链接 + - [目录](directory.md) -- 上一节:[声明,初始化和make](08.1.md) -- 下一节:[for循环构造方法](08.3.md) +- 上一节:[声明、初始化和 make](08.1.md) +- 下一节:[for-range 的配套用法](08.3.md) diff --git a/eBook/08.3.md b/eBook/08.3.md index d875c38..64778dd 100644 --- a/eBook/08.3.md +++ b/eBook/08.3.md @@ -1,4 +1,7 @@ -#8.3 for循环构造方法 +# 8.3 for-range 的配套用法 + +190 + 可以使用for循环构造map: for key, value := range map1 { @@ -21,7 +24,7 @@ package main import "fmt" - + func main() { map1 := make(map[int]float32) map1[1] = 1.0 diff --git a/eBook/directory.md b/eBook/directory.md index 5f42f45..3b8ea06 100644 --- a/eBook/directory.md +++ b/eBook/directory.md @@ -68,6 +68,7 @@ - 第8章:Maps - 8.1 [声明、初始化和 make](08.1.md) - 8.2 [测试键值对是否存在及删除元素](08.2.md) + - 8.3 [for-range 的配套用法](08.3.md) - 第9章:包(package) - 第10章:结构(struct)与方法(method) - 第11章:接口(interface)与反射(reflection)