Golang學習筆記 map

2022-08-30 11:54:11 字數 2497 閱讀 3017

字典是一組`無序的`,`鍵值對`的`集合`。

字典也叫做`關聯陣列`,因為陣列通過`索引`來查詢元素,而字典通過`鍵`來查詢元素。當然,很顯然的,字典的鍵是不能重複的。如果試圖賦值給同乙個鍵,後賦值的值將覆蓋前面賦值的值。

字典的定義也有兩種,一種是`初始化資料`的定義方式,另一種是`使用神奇的make函式`來定義。

1

package main23

import(4

"fmt"5

)67func main()

1415

for key, val :=range x

18 }

輸出結果為

1

package main23

import(4

"fmt"5

)67func main()

20 }

上面的方式就是使用了make函式來初始化字典,`試圖為未經過初始化的字典新增元素會導致執行錯誤`,你可以把使用make函式初始化的那一行注釋掉,然後看一下。

當然上面的例子中,我們可以把定義和初始化合成一句。

1

package main23

import(4

"fmt"5

)67func main()

18 }

現在我們再來看一下字典的資料訪問方式。如果你訪問的元素所對應的鍵存在於字典中,那麼沒有問題,如果不存在呢?

這個時候會返回零值。對於字串零值就是"",對於整數零值就是0。但是對於下面的例子:

1

package main23

import(4

"fmt"5

)67func main()

在這個例子中,很顯然不存在鍵c,但是程式的輸出結果為0,這樣就和鍵a對應的值混淆了。

go提供了一種方法來解決這個問題:

1

package main23

import(4

"fmt"5

)67func main()

18 }

上面的例子中,我們可以看到事實上使用`x["c"]`的返回值有兩個,乙個是值,另乙個是是否存在此鍵的bool型變數,所以我們看到ok為true的時候就輸出鍵c的值,如果ok為false,那就是字典中不存在這個鍵。

現在我們再來看看`go提供的內建函式delete,這個函式可以用來從字典中刪除元素`。

1

package main23

import(4

"fmt"5

)67func main()

輸出結果為

before delete

length: 4

map[a:10 b:20 c:30 d:40]

after delete

length: 3

map[b:20 c:30 d:40]

我們在刪除元素前檢視一下字典長度和元素,刪除之後再看一下。這裡面我們還可以看到`len函式也可以用來獲取字典的元素個數`。當然如果你試圖刪除乙個不存在的鍵,那麼程式也不會報錯,只是不會對字典造成任何影響。

最後我們再用乙個稍微複雜的例子來結束字典的介紹。

我們有乙個學生登記表,登記表裡面有一組學號,每個學號對應乙個學生,每個學生有名字和年齡。

1

package main23

import(4

"fmt"5

)67func main()

10 facebook["

0616020433

"] = map[string]int

11 facebook["

0616020434

"] = map[string]int

1213

for stu_no, stu_info :=range facebook

18fmt.println()19}

20 }

輸出結果為

student: 0616020432

name jemy age 25

student: 0616020433

name andy age 23

student: 0616020434

name bill age 22

當然我們也可以用初始化的方式定義字典:

1

package main23

import(4

"fmt"5

)67func main() ,10"

0616020433

": ,11"

0616020434

": ,12}

1314

for stu_no, stu_info :=range facebook

19fmt.println()20}

21 }

輸出結果是一樣的。

golang學習之map排序方法

實際操作中遇到map無法排序問題,借鑑前輩的方案 親測可行 注意 golang中的map預設是無序的,每次遍歷,得到的輸出結果可能不一樣。golang中的map排序 將map的key放到切片中 對切片排序 遍歷切片,然後來按key來輸出map的值。package main import sort f...

Golang學習筆記

如果乙個method的receiver是 t,你可以在乙個t型別的例項變數v上面呼叫這個method,而不需要 v去呼叫這個method 即不需要 v method 如果乙個method的receiver是t,你可以在乙個 t型別的變數p上呼叫這個method,而不需要 p去呼叫這個method。i...

golang學習筆記

與c語法不同之處 1.引數列表中各個引數型別相同時可以只寫出最後乙個,如 add x,y int int 2.型別在引數名 變數 函式 後面 3.函式的左大括號要跟函式名同一行,否則編譯不過 4.函式定義要先寫關鍵字func在函式開頭 函式外的每個語句都要以func var等等關鍵字開頭 5.在包或...