亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GO 之MAP的使用

發布時間:2020-06-15 14:44:15 來源:網絡 閱讀:562 作者:DBAspace 欄目:編程語言

    哈希表是計算機科學中最重要的數據結構之一。許多哈希表的實現有著千差萬別的特性,但是總體上他們都提供了快速查詢,添加和刪除功能。go語言提供了內置數據類型map。

    映射是一種內置的數據結構,用來保存鍵值對的無序集合。

    map的聲明格式如下:

        1、map[KeyType] ValueType

        KeyType類型必須是可以比較的,而ValueType可以是任意類型,甚至是另一個map

        2、以下這個m是一個鍵值為string,值為int的哈希表:var m map[string]int

        3、哈希表類型是引用類型,像指針或者切片m指向的值是nil;它沒有指向一個初始化了的哈希表。一個nil哈希表在讀的時候,像一個空的哈希表,但是嘗試向m中寫數據會引發一個運行時panic,所以別那樣做。 使用內置函數make初始化一個哈希表

        m = make(map[string]int)//make函數申請并初始化了一個哈希表的數據結構并且返回一個指向這個初始化好了的哈希表

映射的創建:

        1、make(map[KeyType]ValueType,initialCapacity)

        2、make(map[KeyType]ValueType)

        3、map[KeyType]ValueType{}

        4、map[KeyType]ValueType{key1:value1,key2:value2.....,keyN:valueN}

egg:

package main
import "fmt"
func main() {
    map1 := make(map[string]string, 5)
    map2 := make(map[string]string)
    map3 := map[string]string{}
    map4 := map[string]string{"a": "1", "b": "2", "c": "3"}
    fmt.Println(map1, map2, map3, map4)
}

映射的填充和遍歷

package main
import "fmt"
func main() {
    map1 := make(map[string]string)
    map1["a"] = "1"
    map1["b"] = "2"
    map1["c"] = "3"
    fmt.Println(map1)
    for key, value := range map1 {
        fmt.Printf("%s--->%s\n", key, value)
    }
}

##map是對key-value的遍歷,直接操作value是值得拷貝,只有對key的操作才是修改value

package main
import "fmt"
func main() {
    sm := make([]map[int]string, 5)
    for _, value := range sm {
        value = make(map[int]string, 1)
        value[1] = "OK"
        fmt.Println(value)
    }
    fmt.Println(sm)
}

C:/Users/cherry/go/src/test/test.exe  [C:/Users/cherry/go/src/test]
map[1:OK]
map[1:OK]
map[1:OK]
map[1:OK]
map[1:OK]
[map[] map[] map[] map[] map[]]
值得拷貝操作
####
package main
import "fmt"
func main() {
    sm := make([]map[int]string, 5)
    for i := range sm {
        sm[i] = make(map[int]string, 1)
        sm[i][1] = "OK"
        fmt.Println(sm[i])
    }
    fmt.Println(sm)
}

映射的查找、修改和刪除

package main
import "fmt"
func main() {
    map1 := map[string]string{"a": "1", "b": "2", "c": "3"}
    val, exist := map1["a"]  //
    val2, exist2 := map1["d"]
    fmt.Printf("%v,%v\n", exist, val)
    fmt.Printf("%v,%v\n", exist2, val2)
    map1["a"] = "9" //修改
    fmt.Printf("%v\n", map1)
    delete(map1, "b")\\刪除
    fmt.Printf("%v\n", map1)
}

map指定key取對應的value時,可以指定返回兩個值,第一個是對應的value,第二個是一個bool,表示是否有值。如上,"a"肯定有值,"b"肯定沒值,修改映射和添加映射的操作沒什么區別,若指定的鍵不存在則創建,否則,修改之


MAP并發:


哈希表在有并發的場景并不安全:同時讀寫一個哈希表的后果是不確定的。如果你需要使用goroutines同時對一個哈希表做讀寫,對哈希表的訪問需要通過某種同步機制做協調。一個常用的方法是是使用 sync.RWMutex。

這個語句生命了一個counter變量,這是一個包含了一個map和sync.RWMutex的匿名結構體


##當map多層嵌套的時候,需要對它進行初始化操作,如:egg:

package main
import "fmt"
func main() {
    var m map[int]map[int]string
    m = make(map[int]map[int]string) //這里其實只對外層的map做了初始化操作
    a, ok := m[2][1]
    fmt.Println(a, ok)
    if !ok {
        m[2] = make(map[int]string)
    }
    m[2][1] = "Good1"
    a, ok = m[2][1]
    fmt.Println(a, ok)
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湄潭县| 仁怀市| 乳源| 平湖市| 修武县| 凤翔县| 上虞市| 西城区| 乐亭县| 萝北县| 盘山县| 海兴县| 宣威市| 靖江市| 于田县| 平顶山市| 宜昌市| 吉林省| 泸州市| 泉州市| 元谋县| 大城县| 沅江市| 武威市| 肃宁县| 武夷山市| 十堰市| 无为县| 邵阳县| 桑植县| 临朐县| 桃园县| 昭平县| 金坛市| 达日县| 石城县| 阿克| 万年县| 高清| 大足县| 宣武区|