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機制