mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-11 22:53:43 +08:00
8.2
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
|
||||
## 翻译进度
|
||||
|
||||
8.1 [声明、初始化和 make](eBook/08.1.md)
|
||||
8.2 [测试键值对是否存在及删除元素](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)
|
||||
|
@@ -1,4 +1,7 @@
|
||||
#8.3 for循环构造方法
|
||||
# 8.3 for-range 的配套用法
|
||||
|
||||
190
|
||||
|
||||
可以使用for循环构造map:
|
||||
|
||||
for key, value := range map1 {
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user