Go語言學習筆記 map

2021-09-26 11:17:28 字數 1865 閱讀 7931

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...