美文网首页
GO基础5-map

GO基础5-map

作者: 一直吃不饱 | 来源:发表于2020-12-06 17:51 被阅读0次

    map是引用类型

    创建、初始化

    //1、make创建map类型的数据
    var userinfo1 = make(map[string]string) // make(map[string]string 20) 指定长度
    userinfo1["username"] = "张三"
    userinfo1["age"] = "20"
    userinfo1["sex"] = "男"
    fmt.Println(userinfo1) // map[age:20 sex:男 username:张三]
    fmt.Println(userinfo1["username"]) // 张三
    
    //2、声明时填充元素
    var userinfo2 = map[string]string{
        "username": "张三",
        "age":      "20",
        "sex":      "男",
    }
    fmt.Println(userinfo2) // map[age:20 sex:男 username:张三]
    
    //3、类型推导方式
    userinfo3 := map[string]string{
        "username": "张三",
        "age":      "20",
        "sex":      "男",
    }
    fmt.Println(userinfo3)
    

    for range 循环遍历map类型数据

    for k, v := range userinfo3 {
        fmt.Printf("key:%v value:%v\n", k, v)
    }
    /*
    key:username value:张三
    key:age value:20
    key:sex value:男
    */
    

    map类型的CURD

    //查找
    v, ok := userinfo3["age"]
    fmt.Println(v, ok) // 20 true
    //删除
    delete(userinfo3, "sex")
    fmt.Println(userinfo3) // map[age:20 username:张三]
    //增加
    userinfo3["height"] = "180cm"
    

    定义一个map类型的切片

    var userinfo = make([]map[string]string, 3, 3) // 长度 容量
        
    fmt.Println(userinfo[0] == nil) // true
        
    if userinfo[0] == nil {
        userinfo[0] = make(map[string]string)
        userinfo[0]["username"] = "张三"
        userinfo[0]["age"] = "男"
    }
    if userinfo[1] == nil {
        userinfo[1] = make(map[string]string)
        userinfo[1]["username"] = "李四"
        userinfo[1]["age"] = "男"
    }
        
    fmt.Println(userinfo) // [map[age:男 username:张三] map[age:男 username:李四] map[]]
    
    //拿到里面的元素
    for _, v := range userinfo {
        //fmt.Println(v)
        for k2, v2 := range v {
            fmt.Println(k2, v2)
        }
    }
    /*
    username 张三
    age 男
    username 李四
    age 男
    */
    

    如果想在map对象中存放一系列属性,可以将map类型的值定义成切片

    var userinfo = make(map[string][]string)
    userinfo["hobby"] = []string{
        "吃饭",
        "睡觉",
    }
    userinfo["word"] = []string{
        "java",
        "C++",
    }
    fmt.Println(userinfo) // map[hobby:[吃饭 睡觉] word:[java C++]]
    

    map的排序

    map1 := make(map[int]int, 10)
    map1[1] = 50
    map1[8] = 1
    map1[3] = 56
    map1[7] = 77
    map1[2] = 78
    map1[1] = 1
    //无序
    for key, val := range map1 {
        fmt.Println(key, val) 
    }
    //按照key升序输出
    //1.把map的key放在切片里面
    var keySlice []int
    for key, _ := range map1 {
        keySlice = append(keySlice, key)
    }
    fmt.Println(keySlice) //[7 2 1 3 8]
    //2.让key进行升序排序
    sort.Ints(keySlice) //[1 2 3 7 8]
    fmt.Println(keySlice)
    //3.循环遍历key输出map的值
    for _, v := range keySlice {
        fmt.Printf("key=%v  value=%v\n", v, map1[v])
    }
    /*
    8 1
    3 56
    1 1
    7 77
    2 78
    [7 2 1 3 8]
    [1 2 3 7 8]
    key=1  value=1
    key=2  value=78
    key=3  value=56
    key=7  value=77
    key=8  value=1
    */
    

    统计单词出现个数

    var str = "how do you do"
    var strSlice = strings.Split(str, " ")
    fmt.Println(strSlice) // [how do you do]
        
    var strMap = make(map[string]int)
    for _, v := range strSlice {
        strMap[v]++
    }
    fmt.Println(strMap) // map[do:2 how:1 you:1]
    

    相关文章

      网友评论

          本文标题:GO基础5-map

          本文链接:https://www.haomeiwen.com/subject/bvvowktx.html