map 型別 - Go 學習記錄

Ali發表於2019-03-08

基本定義

  • 類似其它語言中的雜湊表或者字典,以 key => value 形式儲存資料 簡單的理解為 PHP 中關聯陣列
  • 格式為 map[keyType]valueType
  • key 必須是支援 == 或者 != 比較運算的型別,不可以是函式,map 或者 slice
  • map 使用 make() 建立,支援 := 這種簡寫的方式
  • map 是無序的,每次列印出來的 map 都會不一樣,它不能通過 index 獲取,而必須通過 key 獲取
  • map 的長度是不固定的,也就是和 slice 一樣,也是一種引用型別
  • 內建的len函式同樣適用於 map,返回 map 擁有的 key 的數量
  • map 的值可以很方便的修改,通過 mapType[“one”] = 11 可以很容易的把 key 為 one 的值改為11
  • 和 slice 一樣,如果兩個map 同時指向同一個底層資料,那麼任何一個改變.另一個也會改變

程式碼練習


var numbers map[string]int  // 宣告一個 key 是字串,值為 int 的map 

numbers = make(map[string]int] // 另一種宣告方式 map 使用 make() 建立

numbers := make(map[string]int) // 支援 := 這種簡寫的方式
numbers["one"] = 1          // 賦值 
numbers["two"] = 2          // 賦值
fmt.Println(numbers["one"]) //  而必須通過 key 獲取對應的值. 輸出 1

rating := map[string]float32{"C": 5, "Go": 4.5, "Python": 4.5, "PHP": 2} // 初始化一個有值的map
csharpRating, ok := rating["C++"] // 新賦值給別的變數
if ok {
    fmt.Println("輸出ok的值", csharpRating)
} else {
    fmt.Println("沒找到對應的OK的值")
}

delete(rating, "C")      // 刪除key為C的元素
fmt.Println(rating["C"]) // 輸出 0

// 內建的len函式同樣適用於 map,返回 map 擁有的 key 的數量
fmt.Println(len(rating)) // 因為刪除了一個key 輸出 3
// 和 slice 一樣,如果兩個map 同時指向同一個底層資料,那麼任何一個改變.另一個也會改變
m := make(map[string]string)
m["Hello"] = "你好"
m1 := m
m1["Hello"] = "不好"  // 現在m["Hello"]的值已經是 不好 了

mapa := map[string]int{"one":1,"two":2}
mapb := map[string]int{"yi": 1, "er": 2}
if mapa["one"] == mapb["yi"] { //  key 必須是支援 == 比較運算
    fmt.Println("可以比較")
    }
if mapa["one"] != mapb["er"] { //  key 必須是支援 != 比較運算
    fmt.Println("可以比較")
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

高永立

相關文章