zoukankan      html  css  js  c++  java
  • 22_Go基础(map)

    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
        }
    
    }
  • 相关阅读:
    当开发者产生一个伟大的想法之后应该做的10件事
    PUT 还是 POST ?
    Failed to issue method call: Unit mysqld.service failed to load: No such file or directory.
    使用 Protocol Buffers 代替 JSON 的五个原因
    Java 打印堆栈的几种方法
    Eclipse调试Java的10个技巧
    如何使用命令查看系统名称?
    Feed系统架构资料收集
    dcm4chee 修改默认(0002,0013) ImplementationVersionName
    【原创】分布式之数据库和缓存双写一致性方案解析
  • 原文地址:https://www.cnblogs.com/luwei0915/p/15357644.html
Copyright © 2011-2022 走看看