map是雜湊表的引用,map的型別為map[k]v,k和v是字典的鍵和值對應的資料型別,
map中所有的鍵都擁有相同的資料型別,同時所有的值都擁有相同的資料型別,
但鍵的型別和值的型別不一定相同
鍵的型別k必須是可以通過操作符==來進行比較的資料型別,
所以map可以檢測某乙個鍵是否已經存在
ages :=
make
(map
[string
]int
)// 建立乙個從string到int的map
ages :=
map[
string
]int
等價於
ages :=
make
(map
[string
]int
)ages[
"alice"]=
31ages[
"charlie"]=
34
通過下標的方式
ages[
"alice"]=
32
如果map使用給定的鍵查詢的元素不存在,就返回型別的零值,例如
// ages["bob"]的值是0
ages[
"bob"
]++
但是map元素不是乙個變數,不可以獲取它的位址
_
=&ages[
"bob"
]// 編譯錯誤,無法獲取map元素的位址
原因是map的增長可能會導致已有元素被重新雜湊到新的儲存位置,
這樣就可能使得獲取的位址無效
可以使用for迴圈來遍歷map中所有的鍵和對應的值
for name, age :=
range ages
map中元素迭代順序是不固定的,不同的實現方法會使用不同的雜湊演算法
使用內建函式delete
delete
(ages,
"alice"
)
即使鍵不在map中,上面的操作也是安全的
map的零值是nil
,也就是說沒有引用任何雜湊表
var ages map
[string
]int
fmt.
println
(ages ==
nil)
// "true"
fmt.
println
(len
(ages)==0
)// "true"
向零值map中設定元素會導致錯誤
ages[
"carol"]=
21// 宕機:為零值map中的項賦值
if age, ok := ages[
"bob"];
!ok
和slice
一樣,map不可以比較,唯一合法的比較就是和nil
做比較,
為了判斷兩個map是否擁有相同的鍵和值,必須寫乙個迴圈
func
equal
(x, y map
[string
]int
)bool
for k, xv :=
range x
}return
true
}
Go語言學習筆記 map
學習筆記根據 無聞 go語言基礎教程 整理 package main import fmt sort func main 普通建立方式 func test1 fmt.println m map 使用make關鍵字建立 func test2 直接宣告和賦值建立 func test3 使用更簡單的方式 ...
go語言學習筆記 map
理解 map是由一組無序的鍵key值value對集合的內建型別,可以通過鍵來獲取對應的值,map和slices一樣,也是引用型別 注意 map之間不能使用 操作符來判斷 建立map 語法 map type of key type of value var mymap map string int n...
go語言學習筆記 map
go語言內建有map這種資料結構,它由無序的鍵值對組成,跟大部分語言中的map用法非常相似。它的鍵不能由可變型別 引用語義 的結構型別擔當,如切片 陣列 函式等等。map只有len,沒有cap。我們可以直接定義,或者通過make函式建立,通過make函式建立時,可以指定容量。package main...