GO語言————8.2 測試鍵值對是否存在及刪除元素

FLy_鵬程萬里發表於2018-07-03

8.2 測試鍵值對是否存在及刪除元素

測試 map1 中是否存在 key1:

在例子 8.1 中,我們已經見過可以使用 val1 = map1[key1] 的方法獲取 key1 對應的值 val1。如果 map 中不存在 key1,val1 就是一個值型別的空值。

這就會給我們帶來困惑了:現在我們沒法區分到底是 key1 不存在還是它對應的 value 就是空值。

為了解決這個問題,我們可以這麼用:val1, isPresent = map1[key1]

isPresent 返回一個 bool 值:如果 key1 存在於 map1,val1 就是 key1 對應的 value 值,並且 isPresent為true;如果 key1 不存在,val1 就是一個空值,並且 isPresent 會返回 false。

如果你只是想判斷某個 key 是否存在而不關心它對應的值到底是多少,你可以這麼做:

_, ok := map1[key1] // 如果key1存在則ok == true,否則ok為false

或者和 if 混合使用:

if _, ok := map1[key1]; ok {
	// ...
}

從 map1 中刪除 key1:

直接 delete(map1, key1) 就可以。

如果 key1 不存在,該操作不會產生錯誤。

示例 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")
	}
}

輸出結果:

The value of "Beijing" in map1 is: 20
Is "Paris" in map1 ?: false
Value is: 0
map1 does not contain Washington

相關文章