本文小編為大家詳細(xì)介紹“golang中map的概念是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“golang中map的概念是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
創(chuàng)新互聯(lián)公司是專(zhuān)業(yè)的溫嶺網(wǎng)站建設(shè)公司,溫嶺接單;提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行溫嶺網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
在golang中,map是一種特殊的數(shù)據(jù)結(jié)構(gòu),是一個(gè)key(索引)和value(值)形式的無(wú)序的集合,也可以稱(chēng)為關(guān)聯(lián)數(shù)組或字典;map是一種能夠快速尋找值的理想結(jié)構(gòu),是能夠快速根據(jù)給定key,找到對(duì)應(yīng)的value的數(shù)據(jù)結(jié)構(gòu)。
Go語(yǔ)言中 map 是一種特殊的數(shù)據(jù)結(jié)構(gòu),一種元素對(duì)(pair)的無(wú)序集合,pair 對(duì)應(yīng)一個(gè) key(索引)和一個(gè) value(值),所以這個(gè)結(jié)構(gòu)也稱(chēng)為關(guān)聯(lián)數(shù)組或字典,這是一種能夠快速尋找值的理想結(jié)構(gòu),給定 key,就可以迅速找到對(duì)應(yīng)的 value。
Golang 的 map 的 key 可以是任何可以使用 == 進(jìn)行比較的 數(shù)據(jù)類(lèi)型,比如 int、string、bool 等,value 可以是任意的類(lèi)型。
map 是一個(gè)無(wú)序的數(shù)據(jù)結(jié)構(gòu),因此同一個(gè) map,每次遍歷獲取的順序很可能是不一致的。
map 概念
map 是引用類(lèi)型,可以使用如下方式聲明:
var mapname map[keytype]valuetype
其中:
mapname 為 map 的變量名。
keytype 為鍵類(lèi)型。
valuetype 是鍵對(duì)應(yīng)的值類(lèi)型。
提示:[keytype] 和 valuetype 之間允許有空格。
在聲明的時(shí)候不需要知道 map 的長(zhǎng)度,因?yàn)?map 是可以動(dòng)態(tài)增長(zhǎng)的,未初始化的 map 的值是 nil,使用函數(shù) len() 可以獲取 map 中 pair 的數(shù)目。
【示例】
package main
import "fmt"
func main() {
var mapLit map[string]int
//var mapCreated map[string]float32
var mapAssigned map[string]int
mapLit = map[string]int{"one": 1, "two": 2}
mapCreated := make(map[string]float32)
mapAssigned = mapLit
mapCreated["key1"] = 4.5
mapCreated["key2"] = 3.14159
mapAssigned["two"] = 3
fmt.Printf("Map literal at \"one\" is: %d\n", mapLit["one"])
fmt.Printf("Map created at \"key2\" is: %f\n", mapCreated["key2"])
fmt.Printf("Map assigned at \"two\" is: %d\n", mapLit["two"])
fmt.Printf("Map literal at \"ten\" is: %d\n", mapLit["ten"])
}
輸出結(jié)果:
示例中 mapLit 演示了使用{key1: value1, key2: value2}的格式來(lái)初始化 map ,就像數(shù)組和結(jié)構(gòu)體一樣。
上面代碼中的 mapCreated 的創(chuàng)建方式mapCreated := make(map[string]float)
等價(jià)于mapCreated := map[string]float{}
。
mapAssigned 是 mapList 的引用,對(duì) mapAssigned 的修改也會(huì)影響到 mapLit 的值。
注意:可以使用 make(),但不能使用 new() 來(lái)構(gòu)造 map,如果錯(cuò)誤的使用 new() 分配了一個(gè)引用對(duì)象,會(huì)獲得一個(gè)空引用的指針,相當(dāng)于聲明了一個(gè)未初始化的變量并且取了它的地址:
mapCreated := new(map[string]float)
接下來(lái)當(dāng)我們調(diào)用mapCreated["key1"] = 4.5的時(shí)候,編譯器會(huì)報(bào)錯(cuò):
invalid operation: mapCreated["key1"] (index of type *map[string]float).
map 容量
和數(shù)組不同,map 可以根據(jù)新增的 key-value 動(dòng)態(tài)的伸縮,因此它不存在固定長(zhǎng)度或者最大限制,但是也可以選擇標(biāo)明 map 的初始容量 capacity,格式如下:
make(map[keytype]valuetype, cap)
例如:
map2 := make(map[string]float, 100)
當(dāng) map 增長(zhǎng)到容量上限的時(shí)候,如果再增加新的 key-value,map 的大小會(huì)自動(dòng)加 1,所以出于性能的考慮,對(duì)于大的 map 或者會(huì)快速擴(kuò)張的 map,即使只是大概知道容量,也最好先標(biāo)明。
這里有一個(gè) map 的具體例子,即將音階和對(duì)應(yīng)的音頻映射起來(lái):
noteFrequency := map[string]float32 {
"C0": 16.35, "D0": 18.35, "E0": 20.60, "F0": 21.83,
"G0": 24.50, "A0": 27.50, "B0": 30.87, "A4": 440}
讀到這里,這篇“golang中map的概念是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。