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

@@ -1,66 +1,70 @@
# 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)
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存在于map1val1就是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)

View File

@@ -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

View File

@@ -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