package main import ( "fmt" "math/rand" "sort" "time" ) func main() { // 初始化 mp1 := make(map[int]string, 8) mp1[0] = "a1" fmt.Println(mp1) // ap[0:a1] fmt.Println(mp1[0]) // a1 fmt.Printf("type of a1: %T ", mp1) // map[int]string // 声明时填充元素 mp2 := map[string]string{ "name": "张三", "hair": "long", } fmt.Println(mp2) // map[hair:long name:张三] // 遍历 mp3 := map[string]int{ "Go": 90, "Python": 80, "JAVA": 70, "C++": 60, } for k, v := range mp3 { fmt.Println(k, v) } for k := range mp3 { fmt.Println(k) } for _, k := range mp3 { fmt.Println(k) } // 判断 key 是否存在 value, ok := mp3["Go"] if ok { fmt.Println(value) } // 删除键值对 delete(mp3, "C++") fmt.Println(mp3) // 值为 map 类型的切片,类似列表里面放了很多字典 mpSlice := make([]map[string]string, 3) for i, v := range mpSlice { fmt.Printf("index: %d, value: %v ", i, v) // index: 0, value: map[] // index: 1, value: map[] // index: 2, value: map[] // 对 map 中元素进行初始化 mpSlice[i] = make(map[string]string, 10) } // 赋值 mpSlice[0]["k00"] = "v00" mpSlice[0]["k01"] = "v01" mpSlice[1]["k10"] = "v10" mpSlice[1]["k11"] = "v11" mpSlice[2]["k20"] = "v20" mpSlice[2]["k21"] = "v21" fmt.Println(mpSlice) // [map[k00:v00 k01:v01] map[k10:v10 k11:v11] map[k20:v20 k21:v21]] for i, v := range mpSlice { for _, v1 := range v { fmt.Printf("index: %d, value: %v ", i, v1) // index: 0, value: v00 // index: 0, value: v01 // index: 1, value: v10 // index: 1, value: v11 // index: 2, value: v21 // index: 2, value: v20 } } // 值为切片类型的 map, 类似字典的值是列表 // mp1 := make(map[int]string, 8) sliceMap := make(map[string][]string, 3) fmt.Println("初始化 sliceMap 其值 : ", sliceMap) // map[] key := [2]string{"Country", "City"} for _, v := range key { value, ok := sliceMap[v] // 字典里是否有键,没有也准备一个存储 值 的切片空间 if !ok { value = make([]string, 0, 2) } if v == "Country" { value = append(value, "中国", "俄罗斯") } else { value = append(value, "北京", "西安") } sliceMap[v] = value } fmt.Println(sliceMap) // map[City:[北京 西安] Country:[中国 俄罗斯]] // 指定顺序遍历 map rand.Seed(time.Now().UnixNano()) // 初始化随机数种子 bMap := make(map[string]int, 200) // 申请一个长度200的 map for i := 0; i < 20; i++ { key := fmt.Sprintf("stu%02d", i) // 生成 stu 开头的字符串 value := rand.Intn(100) // 0-99 随机整数 bMap[key] = value } fmt.Println(bMap, len(bMap)) // 取出 map 中的 keys 放入切片,对 map 进行排序 keys := make([]string, 0, 200) for key := range bMap { keys = append(keys, key) } fmt.Println("排序前:", keys) sort.Strings(keys) fmt.Println("排序后:", keys) for _, key := range keys { fmt.Println(key, bMap[key]) } // 综合有序与无序输出演示 arr := [...]int{1, 2, 5, 4, 3} sli := []int{1, 2, 5, 4, 3} mp := map[string]int{ "a1": 1, "a2": 2, "a3": 3, "a4": 5, "a5": 4, } fmt.Printf("Type: %T, Value: %v ", arr, arr) fmt.Printf("Type: %T, Value: %v ", sli, sli) fmt.Printf("Type: %T, Value: %v ", mp, mp) // Type: [5]int, Value: [1 2 5 4 3] // Type: []int, Value: [1 2 5 4 3] // Type: map[string]int, Value: map[a1:1 a2:2 a3:3 a4:5 a5:4] for _, A := range arr { fmt.Println("查看arr输出顺序", A) // 查看arr输出顺序 1 // 查看arr输出顺序 2 // 查看arr输出顺序 5 // 查看arr输出顺序 4 // 查看arr输出顺序 3 } fmt.Println("----------------------") for _, S := range sli { fmt.Println("查看sli输出顺序", S) // 查看sli输出顺序 1 // 查看sli输出顺序 2 // 查看sli输出顺序 5 // 查看sli输出顺序 4 // 查看sli输出顺序 3 } fmt.Println("----------------------") for _, M := range mp { fmt.Println("查看map输出顺序", M) // 查看map输出顺序 3 // 查看map输出顺序 5 // 查看map输出顺序 4 // 查看map输出顺序 1 // 查看map输出顺序 2 } }