zoukankan      html  css  js  c++  java
  • map

    map是一种无序的基于k-v的数据结构,Go语言中的map是引用类型,必须初始化才能使用。

    语法:map[KeyType]ValueType

    map类型的变量默认初始值为nil,需要使用make()函数初始化来分配内存,

    make(map[KeyType]ValueType,[cap])

    cap表示map的容量,该参数不是必须的,但是应该在初始化map的时候就指定一个合适的容量。

    map的基本使用

    package main
    
    import "fmt"
    
    func main() {
    
        // 声明  初始化  赋值
        map1 := make(map[string]int,8)
        map1["张三"] = 1
        map1["李四"] = 2
        fmt.Println(map1)
    
        // 声明的时候,填充元素
        map2 := map[string]string{
            "姓名":"张三",
            "年龄":"23",
        }
        fmt.Println(map2)
    
    }
    

      

    判断某个键,是否存在

    判断map中键是否存在的特殊写法:value,ok := map[key]

    package main
    
    import "fmt"
    
    func main() {
    
        map1 := make(map[string]int,8)
        map1["张三"] = 30
        map1["李四"] = 40
    
        v,ok := map1["张三"]
        if ok {
            fmt.Println(v)          // v:key对应的value值
        } else {
            fmt.Println("不存在")
        }
    
    }
    

      

    遍历map

    package main
    
    import "fmt"
    
    func main() {
    
        map1 := make(map[string]int,8)
        map1["张三"] = 100
        map1["李四"] = 200
    
        for k,v := range map1 {         // 遍历k,v
            fmt.Println(k,v)
        }
    
        for k := range map1 {           // 只遍历key
            fmt.Println(k)
        }
    
    }
    

      

    删除map中键值对

    package main
    
    import "fmt"
    
    func main() {
    
        map1 := make(map[string]int,8)
        map1["张三"] = 100
        map1["李四"] = 200
    
        delete(map1,"张三")
        fmt.Println(map1)
    }
    

      

    按照大小顺序遍历map

    package main
    
    import (
        "fmt"
        "time"
        "sort"
        "math/rand"
    )
    
    func main() {
        rand.Seed(time.Now().UnixNano()) //初始化随机数种子
    
        var scoreMap = make(map[string]int, 200)        // 创建cap为200的map
    
        for i := 0; i < 100; i++ {
            key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串
            value := rand.Intn(100)          //生成0~99的随机整数
            scoreMap[key] = value                       // 向map中追加数据
        }
    
        //取出map中的所有key存入切片keys
        var keys = make([]string, 0, 200)
        for key := range scoreMap {
            keys = append(keys, key)
        }
    
        //对切片进行排序
        sort.Strings(keys)
        
        //按照排序后的key遍历map
        for _, key := range keys {
            fmt.Println(key, scoreMap[key])
        }
    }
    

      

    元素为map类型的切片

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var mapSlice = make([]map[string]string, 3)
        for index, value := range mapSlice {
            fmt.Printf("index:%d value:%v
    ", index, value)
        }
        fmt.Println("after init")
        // 对切片中的map元素进行初始化
        mapSlice[0] = make(map[string]string, 10)
        mapSlice[0]["name"] = "王五"
        mapSlice[0]["password"] = "123456"
        mapSlice[0]["address"] = "红旗大街"
        for index, value := range mapSlice {
            fmt.Printf("index:%d value:%v
    ", index, value)
        }
    }
    

      

    值为切片类型的map

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var sliceMap = make(map[string][]string, 3)
        fmt.Println(sliceMap)
        fmt.Println("after init")
        key := "中国"
        value, ok := sliceMap[key]
        if !ok {
            value = make([]string, 0, 2)
        }
        value = append(value, "北京", "上海")
        sliceMap[key] = value
        fmt.Println(sliceMap)
    }
    

      

  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/yizhixiaowenzi/p/14686154.html
Copyright © 2011-2022 走看看