|
@@ -1,66 +1,70 @@
|
|
|
# 8.2 测试键值对是否存在及删除元素
|
|
# 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)
|
|
示例 8.4 [map_testelement.go](examples/chapter_8/map_testelement.go)
|
|
|
|
|
|
|
|
- package main
|
|
|
|
|
- import "fmt"
|
|
|
|
|
-
|
|
|
|
|
- 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")
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- 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")
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+```go
|
|
|
|
|
+package main
|
|
|
|
|
+import "fmt"
|
|
|
|
|
+
|
|
|
|
|
+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")
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ 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")
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
|
|
|
输出结果:
|
|
输出结果:
|
|
|
|
|
|
|
@@ -69,7 +73,8 @@ isPresent返回一个bool值:如果key1存在于map1,val1就是key1对应的
|
|
|
Value is: 0
|
|
Value is: 0
|
|
|
map1 does not contain Washington
|
|
map1 does not contain Washington
|
|
|
|
|
|
|
|
-##链接
|
|
|
|
|
|
|
+## 链接
|
|
|
|
|
+
|
|
|
- [目录](directory.md)
|
|
- [目录](directory.md)
|
|
|
-- 上一节:[声明,初始化和make](08.1.md)
|
|
|
|
|
-- 下一节:[for循环构造方法](08.3.md)
|
|
|
|
|
|
|
+- 上一节:[声明、初始化和 make](08.1.md)
|
|
|
|
|
+- 下一节:[for-range 的配套用法](08.3.md)
|