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来排序
    }
  • 相关阅读:
    DMA+USART重定义打印接口
    FTP初探
    ESP8266-lua开发
    GPIO常见问题分析
    新装系统简介
    java四个元注解的作用
    Linux常用操作指令
    @Autowired 与@Resource的区别(详细)
    内存溢出的几种原因和解决办法
    什么是NIO2
  • 原文地址:https://www.cnblogs.com/yaowen/p/8072960.html
Copyright © 2011-2022 走看看