字典是一組`無序的`,`鍵值對`的`集合`。
字典也叫做`關聯陣列`,因為陣列通過`索引`來查詢元素,而字典通過`鍵`來查詢元素。當然,很顯然的,字典的鍵是不能重複的。如果試圖賦值給同乙個鍵,後賦值的值將覆蓋前面賦值的值。
字典的定義也有兩種,一種是`初始化資料`的定義方式,另一種是`使用神奇的make函式`來定義。
1package main23
import(4
"fmt"5
)67func main()
1415
for key, val :=range x
18 }
輸出結果為
1package main23
import(4
"fmt"5
)67func main()
20 }
上面的方式就是使用了make函式來初始化字典,`試圖為未經過初始化的字典新增元素會導致執行錯誤`,你可以把使用make函式初始化的那一行注釋掉,然後看一下。
當然上面的例子中,我們可以把定義和初始化合成一句。
1package main23
import(4
"fmt"5
)67func main()
18 }
現在我們再來看一下字典的資料訪問方式。如果你訪問的元素所對應的鍵存在於字典中,那麼沒有問題,如果不存在呢?
這個時候會返回零值。對於字串零值就是"",對於整數零值就是0。但是對於下面的例子:
1package main23
import(4
"fmt"5
)67func main()
在這個例子中,很顯然不存在鍵c,但是程式的輸出結果為0,這樣就和鍵a對應的值混淆了。
go提供了一種方法來解決這個問題:
1package main23
import(4
"fmt"5
)67func main()
18 }
上面的例子中,我們可以看到事實上使用`x["c"]`的返回值有兩個,乙個是值,另乙個是是否存在此鍵的bool型變數,所以我們看到ok為true的時候就輸出鍵c的值,如果ok為false,那就是字典中不存在這個鍵。
現在我們再來看看`go提供的內建函式delete,這個函式可以用來從字典中刪除元素`。
1package 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函式也可以用來獲取字典的元素個數`。當然如果你試圖刪除乙個不存在的鍵,那麼程式也不會報錯,只是不會對字典造成任何影響。
最後我們再用乙個稍微複雜的例子來結束字典的介紹。
我們有乙個學生登記表,登記表裡面有一組學號,每個學號對應乙個學生,每個學生有名字和年齡。
1package 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
當然我們也可以用初始化的方式定義字典:
1package 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.在包或...