zoukankan      html  css  js  c++  java
  • go7---map

    package main
    
    /*
    map
    类似其它语言中的哈希表或者字典,以key-value形式存储数据
    Key必须是支持==或!=比较运算的类型,不可以是函数、map或slice,
    这3中类型都不能实现== != 的运算,value的类型是任意的。
    Map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍,可以使用slice或者数组的时候不要使用map.
    Map使用make()创建,支持 := 这种简写方式.
    
    make([keyType]valueType, cap),cap表示容量,可省略
    超出容量时会自动扩容,但尽量提供一个合理的初始值
    使用len()获取元素个数
    
    键值对不存在时自动添加,使用delete()删除某键值对
    使用 for range 对map和slice进行迭代操作
    */
    
    import (
        "fmt"
        "sort"
    )
    
    func main() {
        var m1 map[int]string
        m1 = map[int]string{}
        fmt.Println(m1) //map[]
        m1 = make(map[int]string)
        fmt.Println(m1) //map[]
    
        m2 := make(map[int]string)
        fmt.Println(m2) //map[]
    
        m2[1] = "11"       //存入key-value
        fmt.Println(m2)    //map[1:11]
        fmt.Println(m2[1]) //根据key取值
        m2[2] = "22"
        delete(m2, 1)   //删除map的哪个key
        fmt.Println(m2) //map[2:22]
    
        var m3 map[string]map[string]string
        m3 = make(map[string]map[string]string) //初始化最外层的map
        m3["1"] = make(map[string]string)       //初始化键为"1"的这个map,
        //如果value是map那么每个map都要单独的初始化make,
        m3["1"]["3"] = "o"
        fmt.Println(m3) //map[1:map[3:o]]
        //如何判断某个key的map是否初始化了
        a, ok := m3["2"]["2"] //:=用于快速不需要指定类型的初始化,=是用于赋值的,
        fmt.Println(a, ok)    //false
        if ok {
        } //检查是否初始化了
    
        //map的遍历
        slicem := make([]map[int]string, 5) //以map为元素的slice
        for _, v := range slicem {          //遍历slice,   _, v是slice的索引和值,这里不需要索引就忽略了
            v = make(map[int]string, 1) //slice中的map进行初始化
            v[222] = "ddeww"
            fmt.Println(v) //map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww]
        }
        fmt.Println(slicem) //[map[] map[] map[] map[] map[]],v只是一个拷贝,所以原始的map没有改变
    
        slicem1 := make([]map[int]string, 5) //以map为元素的slice
        for i := range slicem {              //i是索引
            slicem1[i] = make(map[int]string, 1) //slice中的map进行初始化,直接操作而不是对拷贝做操作
            slicem1[i][123] = "ddeww"
            fmt.Println(slicem1[i]) //map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww]
        }
        fmt.Println(slicem1) //[map[123:ddeww] map[123:ddeww] map[123:ddeww] map[123:ddeww] map[123:ddeww]]
    
        //map的根据key排序
        map3 := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"}
        slice3 := make([]int, len(map3))
        i := 0
        for k, _ := range map3 { //忽略value,for range 跟for each差不多
            slice3[i] = k
            i++
        }
        fmt.Println(slice3) //[5 1 2 3 4]
        sort.Ints(slice3)   //sort排序,因为是对整数排序,所以用Ints
        fmt.Println(slice3) //[1 2 3 4 5],最后根据key来排序
    }
  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/yaowen/p/8072960.html
Copyright © 2011-2022 走看看