map是一組鍵和值的組合。在map內是無序的。你可以隨時加入或刪除一個鍵及鍵對應的值。
想查看所有鍵值,使用range遍歷好了。
想找到唯一的鍵值,那要使用鍵來得到值。
map的創建必須使用make
m := make(map [string]int)
我們可以把這個map當作是一組人的名字和年齡,然后這樣寫入鍵值。
m := make(map [string]int)
m["Anna"] = 16
m["Tom"] = 15
m["Smith"] = 17
直接打印map
fmt.Println(m)
運行結果
map[Anna:16 Tom:15 Smith:17]
如果需要挨個分析處理,那么需要遍歷,并且判斷后再加上處理語句。比如,我們給值為 17 的加一個特殊的顯示標記“* --> ”
//遍歷,分別處理
for k, v := range m {
if v == 17 {fmt.Print("* --> ")}
fmt.Println(k, v)
}
當然,你也可以直接對你感興趣的map鍵調用。
m["Anna"] = 17
fmt.Println(m)
這個時候的打印輸出就會發現,Anna的值也是 17 了。
如果,你只是想判斷一下,map內是否已經有某個鍵了,可以這樣寫
kv, ok := m["anna"]
fmt.Println(kv, ok)
kv1, ok1 := m["Anna"]
fmt.Println(kv1, ok1)
查看輸出的結果。比較就會發現,當鍵不存在時,返回的值為零值,而同時我們得到了一個 false 的檢測結果。我們可以使用這個方法來判斷map中某個鍵是否存在。
我們還需要知道,如何刪除一個已經存在的元素。很簡單的,只要直接 delete就行。像這樣
delete(m, "Anna")
fmt.Println(m)
觀察打印結果,發現 Anna 已經不見了。
完整代碼
package main
import "fmt"
func main() {
m := make(map [string]int)
m["Anna"] = 16
m["Tom"] = 15
m["Smith"] = 17
fmt.Println(m)
//遍歷,分別處理
for k, v := range m {
if v == 17 {fmt.Print("* --> ")}
fmt.Println(k, v)
}
m["Anna"] = 17
fmt.Println(m)
kv, ok := m["anna"]
fmt.Println(kv, ok)
kv1, ok1 := m["Anna"]
fmt.Println(kv1, ok1)
delete(m, "Anna")
fmt.Println(m)
}
運行結果
map[Anna:16 Tom:15 Smith:17]
Anna 16
Tom 15
* --> Smith 17
map[Anna:17 Tom:15 Smith:17]
0 false
17 true
map[Tom:15 Smith:17]
下面來展示一個復雜一點的例子。map元素值的類型是一個結構體。
package main
import (
"fmt"
)
type Vertex struct {
Lat, Long float64
}
var m map[string]Vertex
func main() {
m = make(map[string]Vertex)
m["Bell Labs"] = Vertex{
40.68433, -74.39967,
}
m["Bei Jing"] = Vertex{39.26, 115.25}
fmt.Println(m)
fmt.Println("--------I'm just a line.---------------")
for lat, _ := range m {
fmt.Println(lat, ":", m[lat].Lat, m[lat].Long)
}
delete(m, "Bei Jing")
fmt.Println(m)
}
運行結果
map[Bell Labs:{40.68433 -74.39967} Bei Jing:{39.26 115.25}]
--------I'm just a line.---------------
Bell Labs : 40.68433 -74.39967
Bei Jing : 39.26 115.25
map[Bell Labs:{40.68433 -74.39967}]