測試 map1 中是否存在 key1:
在例子 8.1 中,我們已經(jīng)見過可以使用 val1 = map1[key1]
的方法獲取 key1 對應(yīng)的值 val1。如果 map 中不存在 key1,val1 就是一個值類型的空值。
這就會給我們帶來困惑了:現(xiàn)在我們沒法區(qū)分到底是 key1 不存在還是它對應(yīng)的 value 就是空值。
為了解決這個問題,我們可以這么用:val1, isPresent = map1[key1]
isPresent 返回一個 bool 值:如果 key1 存在于 map1,val1 就是 key1 對應(yīng)的 value 值,并且 isPresent為true;如果 key1 不存在,val1 就是一個空值,并且 isPresent 會返回 false。
如果你只是想判斷某個 key 是否存在而不關(guān)心它對應(yīng)的值到底是多少,你可以這么做:
_, ok := map1[key1] // 如果key1存在則ok == true,否則ok為false
或者和 if 混合使用:
if _, ok := map1[key1]; ok {
// ...
}
從 map1 中刪除 key1:
直接 delete(map1, key1)
就可以。
如果 key1 不存在,該操作不會產(chǎn)生錯誤。
示例 8.4 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 \"Beijing\" 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")
}
}
輸出結(jié)果:
The value of "Beijing" in map1 is: 20
Is "Paris" in map1 ?: false
Value is: 0
map1 does not contain Washington