Golang中的map的使用

2021-08-09 23:38:21 字數 2795 閱讀 3714

map建立建立

1) make(map[keytype]valuetype, initialcapacity)

2) make(map[keytype]valuetype)

3) map[keytype]valuetype{}

4) map[keytype]valuetype

用4種方式分別建立陣列,其中第一種和第二種的區別在於,有沒有指定初始容量,不過使用的時候則無需在意這些,因為map的本質決定了,一旦容量不夠,它會自動擴容

func test1() 

map4 := map[string]string

fmt.println(map1, map2, map3, map4)

}

輸出 :

map

mapmap

map[c:3 a:1 b:2]

注意,必須要先初始化才能給map賦值設定元素,不然會引起 panic: assign to entry in nil map。

**測試:

package main

import(

"fmt"

)func main()

ages02 := make(map[string]int)

ages02["chris"] =20

ages02["paul"] =30

//age01和age02兩種初始化的方式等價

m1 := make(map[string]int)

m2 := map[string]int{}

//m1和m2建立方式等價,都是建立了乙個空的的map,這個時候m1和m2沒有任何元素

for name,age := range ages01

for name,age := range ages02

var null_map map[string]int

//宣告但未初始化map,此時是map的零值狀態(只有乙個nil元素)

empty_map := map[string]int{} //建立了初始化了乙個空的的map,這個時候empty_map沒有任何元素

fmt.println(m1 != nil && m2 != nil) //true

fmt.println(len(null_map)==0)

fmt.println(null_map ==nil) //true,此時是map的零值狀態(nil)

fmt.println(len(empty_map)==0)

fmt.println(empty_map ==nil) //false,空的的map不等價於nil(map的零值狀態)

empty_map["test"] =12

//執行正常,空的的map可以賦值設定元素

null_map["test"] =12

//panic: assignment to entry in nil map,無法給未初始化的map賦值設定元素

}

輸出:

alice   31

bob 13

chris 20

paul 30

true

true

true

true

false

panic: assignment to entry in

nil map

元素的增刪改查

首先增和改沒什麼區別,只需要map[k]=v即可。

刪除的話使用內建函式delete 來從字典中根據鍵來刪除乙個元素。

查詢乙個元素用下面的**段:

if _, ok := map[key]; ok
關於這裡的根據鍵值索引map元素,這裡多說兩句。

golang中的函式可以多值返回,比如下面函式,既能返回兩數之差,又能返回兩數之積。

package main

import(

"fmt"

)func multi_return(a,b int)(int,int)

func main()

類似的,在你根據鍵值索引某個元素時,也會返回兩個值:索引到的值和本次索引是否成功(這裡可能會因為索數值越界或者索引鍵值有誤而導致索引失敗)。

**如下:

package main

import(

"fmt"

)func main()

age,ok := ages01["bo"] //age才是根據鍵值索引到的值

if !ok else

}

map不能比較

golang中map和slice,func一樣,不支援 == 操作符,就是不能直接比較。唯一合法的就是和nil作比較,判斷該map是不是零值狀態。

當然,可以自定義實現乙個map之間的比較:

package main

import(

"fmt"

)func equal(m1,m2 map[string]int) bool

for k,xv :=range m1

}return

true

}func main()

fmt.println(equal(map01,map02))

}

golang 中 map 的使用

golang 中 map 的初始化方式 1 先宣告 map var m1 map int int 再使用make函式建立乙個非nil的map,nil map不能賦值 m1 make map int int 賦值 m1 66 55fmt.println m1 map 66 55 2 直接 make 建...

Golang 中使用多維 map

golang 的 xml json 解析庫乍看使用起來很方便,只要構造一樣結構的 struct 就可以一下子匯入到變數中去了.其實手工構造 struct 非常容易出現結構偏差,而且最要命的是 unmarshal 執行的時候不是嚴格匯入所以沒有任何報錯.於是這兩天寫了乙個給 golang 用的 xml...

Golang 中使用多維 map

golang 的 xml json 解析庫乍看使用起來很方便,只要構造一樣結構的 struct 就可以一下子匯入到變數中去了.其實手工構造 struct 非常容易出現結構偏差,而且最要命的是 unmarshal 執行的時候不是嚴格匯入所以沒有任何報錯.於是這兩天寫了乙個給 golang 用的 xml...