GO語言學習系列七 GO的map型別

2021-10-08 20:10:45 字數 1945 閱讀 8396

map的結構就是keyvalue的形式,但它儲存是無序的,它是引用型別,其實在某種程度上面說,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,否則為falsepackage 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來拿keyvalue來進行相對應的排序,然後重新賦值 ``` 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...