中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Go語言之map練習

發布時間:2020-07-25 00:08:22 來源:網絡 閱讀:1044 作者:故新 欄目:編程語言

map理論基礎知識

  • 類似其他語言中的哈希表或者字典,以key-value形式存儲數據
  • key必須是支持== 或者 != 比較運算的類型,不可以是函數,map或者slice
  • map查找比線性搜索快很多,但比使用索引訪問數據的類型慢100倍
  • map使用make()創建,支持:=這種簡寫方式

  • make([keyType]valueType, cap), cap表示容量,可省略
  • 超出容量時會自動擴容,但盡量提供一個合理的初始值
  • 使用len()獲取元素個數

  • 鍵值對不存在時自動添加,使用delete()刪除某鍵值對
  • 使用for range 對map和slice進行迭代操作

迭代時,注意事項

Go語言之map練習


map的定義形式 大概有兩種

1、map[K]V
2、map[K1]map[K2]V   復合map,也就是說,值value也是map類型

什么類型,可以做為map的key?

  • map使用哈希表,必須可以比較相等
  • 除了sllice,map,function的內建類型都可以作為key
  • Struct類型不包含上述字段,也可以作為key
//map 練習
package main

import (
    "fmt"
    "sort"
)

func main() {
    //============================方式一:===========================
    //創建一個空的map
    //先聲明一個map類型
    var nodeMap map[int]string
    //初始化nodeMap, 全部為空
    nodeMap = map[int]string{}
    fmt.Println(nodeMap)

    fmt.Println("-----------------------------------------------")
    //============================方式二:===========利用make================
    var clusterMap map[int]string = make(map[int]string)
    fmt.Println(clusterMap)

    fmt.Println("-----------------------------------------------")
    //============================方式三:===========利用推斷功能================
    operatorMap := make(map[int]string)
    fmt.Println(operatorMap)

    //============================方式四:===========創建時直接初始化================
    //此種方式,不需要使用make
    operatorMap2 := map[int]string{3:"hello", 5:"world"}
    fmt.Println("===>:\t",operatorMap2)

    // ======初始化=====
    nodeMap[1] = "sparkNode"
    nodeMap[2] = "esNode"
    fmt.Println(nodeMap)

    //=======根據鍵 取出 元素
    nodeName := nodeMap[2]
    fmt.Println(nodeName)

    //======刪除鍵值對
    delete(nodeMap, 1) //根據鍵值對,進行刪除
    fmt.Println(nodeMap)

    fmt.Println("-----------------------------------------------")
    //--------------復雜map的操作-------------------
    //聲明一個map類型
    var clusterAppTaskId map[string]map[string]string
    //初始化此map類型
    clusterAppTaskId = make(map[string]map[string]string)

    taskId, ok := clusterAppTaskId["spark-beijing"]["/spark-beijing/app-uewqr"]

    if !ok {
        //每一級別的map都有進行初始化,編譯時是找不到的,只有運行時,才能發現
        clusterAppTaskId["spark-beijing"] = make(map[string]string)
    }

    clusterAppTaskId["spark-beijing"]["/spark-beijing/app-uewqr"] = "app-ewr-spark-taskid-001"
    taskId, ok = clusterAppTaskId["spark-beijing"]["/spark-beijing/app-uewqr"]

    fmt.Println(taskId, ok)

    fmt.Println("-----------------------------------------------")
    //--------------迭代操作-------------------
    //for i, v := range slice {
    //
    //}
    //i, 表示下標,v表示對應的值,是拷貝的值
    //要特別注意,對v的任何修改,都不影響原值,
    // map類型也是,不會影響原值的

    //例如,下面的例子,就是對v的操作后,不會對sm產生影響的
    //因此,不建議使用這種方式
    sm := make([]map[int]string, 5)
    for _, v := range sm {
        v = make(map[int]string)
        v[1] = "ok"
        fmt.Println(v)
    }

    fmt.Println(sm)
    fmt.Println("-----------------------------------------------")
    //下面的修改,原值
    for i := range sm {
        sm[i] = make(map[int]string)
        sm[i][2] = "spark"
        fmt.Println(sm[i])
    }

    fmt.Println(sm)

    fmt.Println("-----------------------------------------------")
    //---------------------------------
    //map是無序的,如何按照鍵從小到大獲取map中的值
    //需要生成一個切片,來存儲map的鍵
    //將鍵按照從小到大排序,然后,再根據鍵去取值
    marathonApp := map[int]string{1: "spark", 3: "es", 8: "ftp", 7:"hadoop", 4: "k8s", 2: "docker"}
    len := len(marathonApp)
    //生成一個切片,來存儲鍵
    kSlice := make([]int, len)
    // 聲明一個計數器,用于初始化切片時使用
    var i int = 0
    for k, _ := range marathonApp {
        kSlice[i] = k
        i++
    }
    fmt.Println("鍵排序前:\t", kSlice)

    //切片是引用傳遞,因此,下面排序后,不需要返回值進行接收
    sort.Ints(kSlice)
    fmt.Println("鍵排序后:\t", kSlice)

    fmt.Println("根據鍵按照從小到大,依次取出對應的值")
    //下面,開始迭代marathonApp,就可以按照鍵的從小到大,依次取出值了
    for _, v := range kSlice {
        //這里一定要注意,是用值,而不是 kSlice的下標
        fmt.Println(marathonApp[v])
    }

}
測試某個值是否在map容器里呢?
//測試某個值是否在map里呢?
package main

import "fmt"

func main() {

    sparkClusterIdApp := map[string]string{"spark001":"marathon001","spark002":"marathon002"}

    clusterId001 := "spark003"

    _, ok := sparkClusterIdApp[clusterId001]

    if !ok {
        fmt.Println("clusterId: \t", clusterId001, "不再容器里")
    }

    clusterId002 := "spark001"

    if v,ok :=sparkClusterIdApp[clusterId002]; ok {
        fmt.Println("value:\t", v)
    } else {
        fmt.Println("value does not exist!")
    }

}

測試結果:

   clusterId:    spark003 不再容器里
value:   marathon001

Process finished with exit code 0

向AI問一下細節

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

AI

十堰市| 郁南县| 南阳市| 永仁县| 贵定县| 天等县| 尚志市| 石城县| 礼泉县| 溧水县| 安龙县| 扎兰屯市| 梁河县| 塔城市| 抚顺县| 长寿区| 商洛市| 赤峰市| 饶阳县| 丰镇市| 乌苏市| 仁布县| 平塘县| 洛隆县| 老河口市| 莱西市| 嵊泗县| 清徐县| 礼泉县| 汉寿县| 兴安盟| 自贡市| 徐闻县| 外汇| 沂水县| 克东县| 澎湖县| 太白县| 务川| 渝中区| 凌源市|