This commit is contained in:
Unknwon
2015-02-21 03:10:05 -05:00
parent 19b7cd9899
commit 885d84ca62
4 changed files with 58 additions and 49 deletions

View File

@@ -9,7 +9,7 @@
## 翻译进度 ## 翻译进度
8.1 [声明、初始化和 make](eBook/08.1.md) 8.2 [测试键值对是否存在及删除元素](eBook/08.2.md)
## 支持本书 ## 支持本书

View File

@@ -1,35 +1,38 @@
# 8.2 测试键值对是否存在及删除元素 # 8.2 测试键值对是否存在及删除元素
188
测试 map1 中是否存在 key1 测试 map1 中是否存在 key1
在例子8.1中我们已经见过可以使用val1 = map1[key1]的方法获取key1对应的值val1。如果map中不存在key1val1就是一个值类型的空值。 在例子 8.1 中,我们已经见过可以使用 `val1 = map1[key1]` `的方法获取 key1 对应的值 val1。如果 map 中不存在 key1val1 就是一个值类型的空值。
这就会给我们带来困惑了:现在我们没法区分到底是 key1 不存在还是它对应的 value 就是空值。 这就会给我们带来困惑了:现在我们没法区分到底是 key1 不存在还是它对应的 value 就是空值。
为了解决这个问题,我们可以这么用: val1, isPresent = map1[key1] 为了解决这个问题,我们可以这么用:`val1, isPresent = map1[key1]`
isPresent 返回一个 bool 值:如果 key1 存在于 map1val1 就是 key1 对应的 value 值,并且 isPresent为true如果 key1 不存在val1 就是一个空值,并且 isPresent 会返回 false。 isPresent 返回一个 bool 值:如果 key1 存在于 map1val1 就是 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)
```go
package main package main
import "fmt" import "fmt"
@@ -61,6 +64,7 @@ isPresent返回一个bool值如果key1存在于map1val1就是key1对应的
fmt.Println("map1 does not contain Washington") fmt.Println("map1 does not contain Washington")
} }
} }
```
输出结果: 输出结果:
@@ -70,6 +74,7 @@ isPresent返回一个bool值如果key1存在于map1val1就是key1对应的
map1 does not contain Washington map1 does not contain Washington
## 链接 ## 链接
- [目录](directory.md) - [目录](directory.md)
- 上一节:[声明,初始化和make](08.1.md) - 上一节:[声明初始化和 make](08.1.md)
- 下一节:[for循环构造方](08.3.md) - 下一节:[for-range 的配套用](08.3.md)

View File

@@ -1,4 +1,7 @@
#8.3 for循环构造方 # 8.3 for-range 的配套用
190
可以使用for循环构造map 可以使用for循环构造map
for key, value := range map1 { for key, value := range map1 {

View File

@@ -68,6 +68,7 @@
- 第8章Maps - 第8章Maps
- 8.1 [声明、初始化和 make](08.1.md) - 8.1 [声明、初始化和 make](08.1.md)
- 8.2 [测试键值对是否存在及删除元素](08.2.md) - 8.2 [测试键值对是否存在及删除元素](08.2.md)
- 8.3 [for-range 的配套用法](08.3.md)
- 第9章package - 第9章package
- 第10章结构struct与方法method - 第10章结构struct与方法method
- 第11章接口interface与反射reflection - 第11章接口interface与反射reflection