Go Map

Map 是一種無序的鍵值對的集合。Map 最重要的一點是通過 key 來快速檢索數據,key 類似於索引,指向數據的值。
Map 是一種集合,所以我們可以像迭代數組和切片那樣迭代它。不過,Map 是無序的,我們無法決定它的返回順序,這是因爲 Map 是使用 hash 表來實現的。

定義 Map

在聲明的時候不需要知道 map 的長度,map 是可以動態增長的。
可以使用內建函數 make 也可以使用 map 關鍵字來定義 Map:

/* 聲明變量,默認 map 是 nil */
var map_name map[key_type]value_type    
/* 使用 make 函數 */
map_name := make(map[key_type]value_type)  

如果不初始化 map,那麼就會創建一個 nil map。nil map 不能用來存放鍵值對

Map初始化

var userInfoMap = map[string]string{"name":"Json","age":"20"}    
package main
import "fmt"
func main() {
   var countryCapitalMap map[string]string
   /* 創建集合 */
   countryCapitalMap = make(map[string]string)
   /* map 插入 key-value 對,各個國家對應的首都 */
   countryCapitalMap["France"] = "Paris"
   countryCapitalMap["Italy"] = "Rome"
   countryCapitalMap["Japan"] = “Tokyo"
   countryCapitalMap["India"] = "New Delhi"
   /* 使用 key 輸出 map 值 */
   for country := range countryCapitalMap {
      fmt.Println("Capital of",country,"is",countryCapitalMap[country])
   }
   /* 查看元素在集合中是否存在 */
   captial, ok := countryCapitalMap["United States"]
   /* 如果 ok 是 true, 則存在,否則不存在 */
   if(ok){
      fmt.Println("Capital of United States is", captial)
   }else {
      fmt.Println("Capital of United States is not present")
   }
}

//output
Capital of France is Paris
Capital of Italy is Rome
Capital of Japan is Tokyo
Capital of India is New Delhi
Capital of United States is not present

鍵值對存在判斷:isPresent和刪除map下的某一個key

1.判斷鍵值對的對應關係

value1, isPresent = map_name[key1]   

2.判斷某一個key是否存在

_, ok := map_name[key]

3.刪除map下key對應的值,key不存在的時候不會產生錯誤

delete(map_name, key)
package main
import "fmt"
func main() {
   userInfoMap := map[string]string{
      "name" : "Json",
      "age"  : "20",
      "gender" : "male",
      "hobby" : "coding",
   }
   fmt.Println(userInfoMap)
   if (userInfoMap["gender"] == "male") {
      fmt.Println(userInfoMap["gender"])
   }
   _, ok := userInfoMap["gender"]
   fmt.Println(ok)
   if _, ok := userInfoMap["name"]; ok {
      fmt.Println(userInfoMap["name"])
   }
   delete(userInfoMap, "hobby")
   fmt.Println(userInfoMap)
}

使用map需要注意的點:

1.map是無需的,每一次打印的結果都是不一樣的,map不能通過index獲取,只能通過key獲取
2.map的長度是不固定的,也就是和slice一樣是一種引用傳遞
3.內置的函數len同樣適用於map,返回的是map中key的個數
4.map不是thread-safe,在多個go-routine存取時,必須使用mutex lock機制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章