GO基礎之Map

go開發手冊:   https://studygolang.com/pkgdocgolang

 1、什麼是map

有資料翻譯成地圖、映射或字典。可是大多數習慣上翻譯成集合。
一、map是Go中的內置類型,它將一個值與一個鍵關聯起來。可使用相應的鍵檢索值。數組

  • map是一種無序的鍵值對(key-value pair)的集合。map經過key來快速檢索數據,key相似於索引,指向相應的value值。
  • map是一種集合,因此能夠像遍歷數組或切片那樣去遍歷它,不過map是無序的,因此沒法決

 

二、使用map的注意細節:
• map是無序的,每次打印出來的map都會不同,它不能經過index獲取,而必須經過key獲取;
• map的長度是不固定的,和slice-樣能夠擴展。內置的len()函數一樣適用於map,返回map擁有的鍵值對的數量。可是map不能經過cap()函數計算容量(或者說cap()函數的參數不能夠是map);
•同_tmap中key必須保證惟_。key的數據類型必須是可參與比較運算的類型,也就是支持==或!=操做的類型。如布爾型、整數型、浮點型、字符串型、數組。對於切片、函數等引用類型則不能做爲鍵的類型;函數

(Invalid map key type: must not be must not be a function , map or slice)
• map的value能夠是任何數據類型。
•和slice—樣,map也是一種引用類型;spa

 

2、map的使用

一、map的聲明翻譯

map中key能夠是:int、float、bool、string、數組;    必定不能夠是:切片、函數、mapcode

package main

import (
    "fmt"
)

func main() {
    //map的聲明 一(var 變量名 map[key的類型]value的類型 )
    var map1 map[string]string
    fmt.Printf("%T,%v,%v \n", map1, map1, map1 == nil) //map[string]string,map[],true
    //map聲明 二
    map2 := make(map[string]string)
    fmt.Printf("%T,%v,%v \n", map2, map2, map2 == nil) //map[string]string,map[],false
}

二、map的初始化blog

package main

import (
    "fmt"
)

func main() {
    //map的聲明 一(var 變量名 map[key的類型]value的類型 )
    var map1 map[string]string
    fmt.Println("map的長度", len(map1))
    //在聲明的同時初始化數據
    var map2 = map[string]string{
        "sz": "張三",
        "ls": "李四",
    }
    fmt.Println("map=", map2)
    
    //先聲明 而後再賦值
    map3 := make(map[string]string)
    map3["ww"] = "王五"
    map3["lb"] = "劉備"
    fmt.Println("map=", map3)
}

三、map的CURD索引

package main

import (
    "fmt"
)

func main() {
    //=========在聲明的同時初始化數據
    var map2 = map[string]string{
        "zs": "張三",
        "ls": "李四",
    }
    //=========map添加數據
    map2["lb"] = "劉備"

    //=========map的遍歷
    for k, v := range map2 {
        fmt.Println("k=", k, " v=", v)
    }
    //=========根據key檢測值是否存在
    v, ok := map2["sz"]
    fmt.Println("v=", v, " ok=", ok) //v= 張三  ok= true
    v1, ok1 := map2["sssss"]
    fmt.Println("v=", v1, " ok=", ok1) //v=   ok= false
    if value, key := map2["lb"]; key {
        fmt.Println("元素的值=", value)
    }
    //=========修改map中key對應的value
    map2["zs"] = "zhangshan"
    fmt.Println("update=", map2)

    //=========delete 刪除map中的元素
    //該函數沒有返回值,若是刪除不存在的key程序不會報錯
    fmt.Println("delete befor=", map2)
    delete(map2, "lb")
    delete(map2, "HHHHHHHHHHHHHH")
    fmt.Println("delete after=", map2)
    //=========清空map (go語言沒有清空的函數,若是要清空,就是直接賦新的map)
    map2 = map[string]string{}
    //map2 = make(map[string]string)
    fmt.Println("clear=", map2)

    //map是引用類型
    
}

四、map是引用類型開發

package main

import (
    "fmt"
    "container/list"
)

func main() {
    //初始薪資
    salary := map[string]float64 {
        "Steven":15000,
        "Josh":20000,
        "Daniel":5000,
    }
    fmt.Println("初始薪資",salary)

    //調薪後
    newSalary := salary
    newSalary["Daniel"] = 8000
    fmt.Println("調薪後:" , newSalary)
    fmt.Println("原始薪資salary是否受影響:" , salary)

    //按期漲薪
    changeSalary(salary)
    fmt.Println("原始薪資salary是否受影響:" , salary)
}

//按期漲薪
func changeSalary(m map[string]float64) {
    for k :=range m {
        m[k] *= 1.1
    }
}
相關文章
相關標籤/搜索