Golang通脈之map詳情

2022-09-24 23:18:11 字數 2572 閱讀 3082

目錄

go語言中提供的對映關係容器為map,其內部使用雜湊表(hash)實現。

map是一種無序的鍵值對的集合。map 最重要的一點是通過 key 來快速檢索資料,key類似於索引,指向資料的值 map 是一種集合,所以可以像迭代陣列和切片那樣迭代它。不過,map 是無序的,無法決定它的返回順序,這是因為 map 是使用 hash 表來實現的,go語言中的map是引用型別,必須初始化才能使用。

使用map過程中需要注意的幾點:

go語言中 map的定義語法如下:

map[keytype]valuetype

其中**map型別的變數預設初始值為nil,需要使用make()函式來分配記憶體 (宣告並初始化) **。

語法為:

make(map[keytype]valuetype, [cap])

其中cap表示map的容量,該引數雖然不是必須的,但是我們應該在初始化map的時候就為其指定乙個合適的容量。

可以使用內建函式 make ,也可以使用 map 關鍵字來定義 map:

/* 宣告變數,預設 map 是 nil */

var mapvariable map[keytype]valuetype

/* 使用 make 函式 */

mapvariable = make(map[keytype]valuetype)

rating := map[string]float32

如果不初始化map,那麼就會建立乙個 www.cppcns.comnil map。nil map不能用來存放鍵值對

map中的資料都是成對出現的:

func main()

輸出:map[小明:100 張三:90]

100type of a:map[string]int

map也支援在宣告的時候填充元素,例如:

func main()

fmt.println(userinfo) //

}go語言中有個判斷map中鍵是否存在的特殊寫法,格式如下:

value, ok := map[key]

func main() else

}go語言中使用for range遍歷map。

func main()

}只想遍歷key的時候,可以按下面的寫法:

func main()

}注意:遍歷map時的元素順序與新增鍵值對的順序無關。

使用delete()內建函式從map中刪除一組鍵值對,刪除函式不返回任何值,delete()函式的格式如下:

delete(map, key)

其中,func main()

}func main()

//取出map中的所有key存入切片keys

var keys = make(string, 0, 200)

for key := range scoremap

//對切片進行排序

sort.strings(keys)

//按照排序後的key遍歷map

for _, key := range keys

}下面的**切片中的元素為map型別時的操作:

func main()

fmt.println("after init")

// 對切片中的map元素進行初始化

mapslice[0] = make(map[string]string, 10)

mapslice[0]["username"] = "張三"

mapslice[0]["password"] = "123lrpxqhsjh456"

mapslice[0]["address"] = "深圳"

for index, value := range mapslice

}下面的**演示了map中值為切片型別的操作:

func main()

value = append(value, "北京", "上海")

slicemap[key] = value

fmt.println(slicemap)

}與切片相似,map是引用型別。當將map分配給乙個新變數時,它們都指向相同的內部資料結構。因此,乙個的變化會反映另乙個:

func main()

personsalary["mike"] = 9000

fmt.println("original person salary", personsalary)

newpersonsalary := personsalary

newpersonsalary["mike"] = 18000

fmt.println("person salary changed", personsalary)

}執行結果:

original person salary map[steve:12000 jamie:15000 mike:9000] 

person salary changed map[steve:12000 jamie:15000 mike:18000]

map不能使用操作符進行比較。只能用來檢查map是否為空。否則會報錯:invalid operation: map1 == map2 (map can only be comparedto nil)

Golang通脈之流程控制詳情

目錄 前言 流程控制是每種程式語言控制邏輯走向和執行次序的重要部分,流程控制可以說是一門語言的 經脈 go語言中最常用的流程控制有if和for,而switch和goto主要是為了簡化 降低重複 而生的結構,屬於擴充套件類的流程控制。go語言中if條件判斷的格式如下 if 表示式1 else if 表...

golang 之 map 新玩法

筆者接觸 golang 也有兩年的時間了,最常用的以string為key map 型別無非就是 map string 基礎型別 int string float等 map string inte ce map string struct 這幾類,說來慚愧,以前抽象資料結構,在用多維 map 的時候都...

golang學習之map排序方法

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