Go語言中提供的映射關(guān)系容器為map,其內(nèi)部使用散列表(hash)實(shí)現(xiàn)。
map是一種無序的基于key-value的數(shù)據(jù)結(jié)構(gòu),Go語言中的map是引用類型,必須初始化后才能使用。
map定義語法如下:
map[KeyType]ValueType
其中,
KeyType表示鍵的類型。
ValueType表示鍵對(duì)應(yīng)的值的類型。
map類型的變量,默認(rèn)初始值為nil,需要使用make()函數(shù)來分配內(nèi)存。語法為:
make(map[KeyType]ValueType, [cap])
其中cap表示map的容量,該參數(shù)雖然不是必須的,但是我們需要在初始化map的時(shí)候?yàn)槠渲付ㄒ粋€(gè)合適的容量。
package main
import "fmt"
func main() {
scoreMap := make(map[string]int, 8)
scoreMap["張三"]=90
scoreMap["李四"]=100
fmt.Println(scoreMap) //map[張三:90 李四:100]
fmt.Println(scoreMap["張三"]) //90
fmt.Printf("type of a:%T\n",scoreMap) //type of a:map[string]int
}
package main
import "fmt"
func main() {
userInfo := map[string]string{
"name":"張三",
"passed":"12345",
}
fmt.Println(userInfo)
}
結(jié)果:
map[name:張三 passed:12345]
Go語言中判斷map中某個(gè)鍵是否存在的特殊寫法:
value,ok:=map[key]
package main
import "fmt"
func main() {
userInfo := map[string]string{
"name":"張三",
"passed":"12345",
}
v,ok :=userInfo["name"]
if ok{
fmt.Println(v)
}else{
fmt.Println("查無此人")
}
}
結(jié)果:
張三
package main
import "fmt"
func main() {
scoreMap :=make(map[string]int)
scoreMap["張三"]=90
scoreMap["李四"]=100
for k,v :=range scoreMap{
fmt.Println(k,v)
}
//可以只遍歷key
for k :=range scoreMap{
fmt.Println(k)
}
}
結(jié)果:
李四 100
張三 90
張三
李四
注意:遍歷map時(shí),元素順序與添加鍵值對(duì)的順序無關(guān)。
使用delete()內(nèi)建函數(shù)從map中刪除鍵值對(duì),delete()函數(shù)的格式如下:
delete(map,key)
其中,
map表示要?jiǎng)h除鍵值對(duì)的map
key表示要?jiǎng)h除的鍵
package main
import "fmt"
func main() {
scoreMap :=make(map[string]int)
scoreMap["張三"]=90
scoreMap["李四"]=100
delete(scoreMap,"張三")
for k,v :=range scoreMap{
fmt.Println(k,v)
}
}
結(jié)果:
李四 100
package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())//初始化隨機(jī)數(shù)種子
var scoreMap = make(map[string]int,200)
for i:=0;i<10;i++{
key := fmt.Sprintf("stu%02d",i)//生成stu開頭的字符串
value := rand.Intn(100)//生成0-99的隨機(jī)整數(shù)
scoreMap[key]=value
}
fmt.Println(scoreMap)
//取出map中所有的key,存入切片keys
var keys =make([]string,0,200)
for key :=range scoreMap{
keys=append(keys,key)
}
sort.Strings(keys)
for _,value :=range keys{
fmt.Println(scoreMap[value])
}
}
結(jié)果:
map[stu00:6 stu01:77 stu02:27 stu03:98 stu04:78 stu05:90 stu06:23 stu07:99 stu08:35 stu09:72]
6
77
27
98
78
90
23
99
35
72
package main
import "fmt"
func main() {
var mapSlice = make([]map[string]string, 3)
for index, value := range mapSlice {
fmt.Printf("index:%d value:%v\n", index, value)
}
mapSlice[0] = make(map[string]string, 10)
mapSlice[0]["name"] = "張三"
mapSlice[0]["passwd"] = "123"
for index, value := range mapSlice {
fmt.Printf("index:%d value:%v\n", index, value)
}
}
結(jié)果:
index:0 value:map[]
index:1 value:map[]
index:2 value:map[]
index:0 value:map[name:張三 passwd:123]
index:1 value:map[]
index:2 value:map[]
package main
import "fmt"
func main() {
var sliceMap = make(map[string][]string,3)
fmt.Println(sliceMap) //map[]
key := "中國(guó)"
value,ok :=sliceMap[key]
if !ok{
value=make([]string,3)
}
value=append(value,"北京","上海")
sliceMap[key]=value
fmt.Println(sliceMap)//map[中國(guó):[ 北京 上海]]
}
寫一個(gè)程序,統(tǒng)計(jì)一個(gè)字符串中每個(gè)單詞出現(xiàn)的次數(shù)。比如:”how do you do”中how=1 do=2 you=1。
package main
import (
"fmt"
"strings"
)
func main() {
var str = "how do you do"
var mymap = make(map[string]int)
li :=strings.Split(str," ")
for _,key := range li{
_,ok:=mymap[key]
if !ok{
mymap[key]=1
}else{
mymap[key]+=1
}
}
fmt.Println(mymap)
}
結(jié)果:
map[do:2 how:1 you:1]
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括宿松網(wǎng)站建設(shè)、宿松網(wǎng)站制作、宿松網(wǎng)頁制作以及宿松網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,宿松網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到宿松省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!