map的結構就是key
與value
的形式,但它儲存是無序
的,它是引用
型別,其實在某種程度上面說,map其實可以歸類為陣列,相當於是在陣列的基礎上做了一些擴充套件,實現某些相應的功能
`var map變數 map[key的型別] value的型別 map變數 = map[key的型別] value的型別{}
例:var map1 map[int]string fmt.println(map1) map1 = map[int]string fmt.println(map1)
輸出為:map map[1:a 2:b]
map在初始化時,如果不賦值,預設值為nil
也就是空值
map類似於陣列,也可以使用make
形式來賦值var map1 = make(map[int]string) fmt.println(map1) map1[1] = "a" fmt.println(map1)
輸出:map map[1:a]
使用make
進行宣告和初始化後,就可以像使用陣列arr[i]
的形式一樣,來操作map的值
做個小例子來加深一些影響:給定乙個map的格式並賦值,讓map的鍵與值交換位置package main import "fmt" func main() fmt.println(map1) var map2 = make(map[string]int) for k,v := range map1 fmt.println(map2) }
輸出為:map[2:b 3:c 4:d 1:a] map[c:3 d:4 a:1 b:2]
還記得在寫變數賦值時的這種形式嗎?var str = "str" var str1,_ = str
就是上面的_
,在go語言中,會返回兩個狀態,乙個是返回的值,另乙個是值的狀態,如果值為真,後面的_
是true
,否則為false
package main import "fmt" func main() fmt.println(map2) }
輸出為:map[b:2 e:5 c:3 d:4 a:1]
在上面的例子中,當map2["a"]
的值為真是,就給map2
新加了乙個值,反之,就可以判斷這個鍵是否存在
直接delete(map1, key1)
就可以var map1 = map[int]string fmt.println(map1) delete(map1, 2) fmt.println(map1)
輸出為:map[1:a 2:b 3:c 4:d] map[1:a 3:c 4:d]
為什麼使用delete
刪除map時不用返回值呢?
前面介紹過,map是引用傳遞,在刪除時,相當於是直接刪除這片記憶體的值尤於map是無規則的儲存,所以本身是不存在map排序的,但某些情況下,又需要排序,所以借助
for
來拿key
戓value
來進行相對應的排序,然後重新賦值 ``` package main import ( "fmt" "sort" )
var ( barval = map[string]int ) func main() keys := make(string, len(barval)) i := 0 for k, _ := range barval sort.strings(keys) fmt.println() fmt.println("sorted:") for _, k := range keys } ```
可以自行跑下上面的那串**
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...