您好,登錄后才能下訂單哦!
map使用make()創建,支持:=這種簡寫方式
使用len()獲取元素個數
1、map[K]V
2、map[K1]map[K2]V 復合map,也就是說,值value也是map類型
//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里呢?
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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。