溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

6.Go語言基礎(chǔ)之map

發(fā)布時(shí)間:2020-07-18 18:25:04 來源:網(wǎng)絡(luò) 閱讀:186 作者:DevOperater 欄目:編程語言

1.map

1.1map介紹

Go語言中提供的映射關(guān)系容器為map,其內(nèi)部使用散列表(hash)實(shí)現(xiàn)。
map是一種無序的基于key-value的數(shù)據(jù)結(jié)構(gòu),Go語言中的map是引用類型,必須初始化后才能使用。

1.2map定義

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è)合適的容量。

1.3map的基本使用

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]

1.4判斷某個(gè)鍵是否存在

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é)果:
張三

1.5map的遍歷

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)。

1.6使用delete()函數(shù)刪除鍵值對(duì)

使用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

1.7按照指定順序遍歷map

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

1.8元素為map類型的切片

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[]

1.9值為切片類型的map

package main

import "fmt"

func main() {
    var sliceMap = make(map[string][]string,3)
    fmt.Println(sliceMap) //map[]
    key := "中國"
    value,ok :=sliceMap[key]
    if !ok{
        value=make([]string,3)

    }
    value=append(value,"北京","上海")
    sliceMap[key]=value
    fmt.Println(sliceMap)//map[中國:[   北京 上海]]
}

2.練習(xí)

寫一個(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]
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI