golang-map的基本操作

map的基本操作

map的定義方式

由于map是引用類型,所以在操作的時候,必須先初始化

方式一:

    var a map[string]int
    a = make(map[string]int, 16)
    fmt.Printf("a = %#v \n", a)
    a["stu01"] = 1000

方式二:

    a := map[string]int{
        "stu01": 100,
        "stu03": 300,
        "stu02": 200,
    }
    fmt.Printf("a = %#v \n", a)

判斷key是否存在

在獲取map的值得時候,可以接收兩個值,一個是獲取的值,一個是判斷是否存在的bool類型,如果存在,返回對應值,bool為true,不存在,返回對應類型的空值,bool為false

func test3() {
    var a map[string]int
    a = make(map[string]int, 16)
    fmt.Printf("a = %#v \n", a)
    a["stu01"] = 1000
    a["stu02"] = 2000
    var result int
    var ok bool
    var key string = "stu04"
    result, ok = a[key]
    if ok == false {
        fmt.Printf("key is %s is not exist\n", key)
    } else {
        fmt.Printf("key is %s = %d \n", key, result)
    }
}

map的遍歷key,value

使用for ... range 的方法進行遍歷,獲取當中的值

func test4() {
    rand.Seed(time.Now().UnixNano())

    var a map[string]int
    a = make(map[string]int, 1024)
    for i := 0; i < 128; i++ {
        key := fmt.Sprintf("stu%d", i)
        value := rand.Intn(1000)
        a[key] = value
    }
    for key, value := range a {
        fmt.Printf("map[%s]=%d\n", key, value)
    }
}

map刪除元素

使用內(nèi)置的delete方法進行刪除

func test5() {
    var a map[string]int
    a = make(map[string]int, 16)
    fmt.Printf("a = %#v \n", a)
    a["stu01"] = 1000
    a["stu02"] = 2000
    a["stu03"] = 3000
    fmt.Printf("a = %#v \n", a)
    delete(a, "stu02")
    fmt.Printf("DEL after a = %#v \n", a)
}

刪除所有的,需要用for循環(huán),挨個刪除

map的長度

使用len內(nèi)置函數(shù)求出

map的復制

map是引用類型,在系統(tǒng)中,復制的時候,指向的內(nèi)存地址是一樣的,所以修改一個,其他的也會跟著變更

func test6() {
    var a map[string]int
    if a == nil {
        a = make(map[string]int, 16)
        a["stu01"] = 1000
        a["stu02"] = 2000
        a["stu03"] = 3000
        fmt.Printf("a = %#v \n", a)
        b := a
        b["stu01"] = 8888
        fmt.Printf("after modify a : %#v\n", a)
    }
}

map的切片

由于map的value可以是數(shù)組,或者int,所以在value是數(shù)組的時候,使用的時候,也需要先初始化

func main() {
    rand.Seed(time.Now().UnixNano())
    var s []map[string]int
    s = make([]map[string]int, 5, 16)
    for index, value := range s {
        fmt.Printf("slice[%d] = %v \n", index, value)
    }
    fmt.Println()
    s[0] = make(map[string]int, 16)
    s[0]["stu01"] = 1000
    s[0]["stu02"] = 2000
    s[0]["stu03"] = 3000
    for index, value := range s {
        fmt.Printf("slice[%d] = %v \n", index, value)
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容