Go語言之map練習

來源:互聯網
上載者:User

標籤:map

map理論基礎知識
  • 類似其他語言中的雜湊表或者字典,以key-value形式儲存資料
  • key必須是支援== 或者 != 比較運算的類型,不可以是函數,map或者slice
  • map尋找比線性搜尋快很多,但比使用索引訪問資料的類型慢100倍
  • map使用make()建立,支援:=這種簡寫方式

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

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

//map 練習package mainimport (    "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])    }}    fmt.Println("-----------------------------------------------")    //------------------如何將map類型的鍵與值對換呢---------------    kafkaClusterIdNameMap := map[int]string{1: "kafka-beijing", 2: "kafka-sjz", 4: "kafka-shanghai", 5: "kafka-tianjin", 3: "kafka-yizhuang"}    kafkaNameClusterIdMap := make(map[string]int)    for k, v := range kafkaClusterIdNameMap {        kafkaNameClusterIdMap[v] = k    }    fmt.Println("kafkaClusterIdNameMap:\t", kafkaClusterIdNameMap)    fmt.Println("kafkaNameClusterIdMap:\t", kafkaNameClusterIdMap)

Go語言之map練習

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.