Go - 27 Go map

map的介绍:
    map是key-value数据结构,又称为字段或者关联数组。类似其他编程语言的集合,在编程中是经常使用的;
 
基本语法:
    var  map 变量名 map[key type]value type
        key 可以是什么类型?
        golang中的map的key可以是很多种类型,比如bool, 数字,string, 指针,channel,还可以是只包含前面几个类型的接口,结构体,数组,通常为int,string;
        注意:slice map function 不可以做key,因为这几个没法用 == 来判断是否key是否存在;key不能重复
        
        value 可以是什么类型?
        value的类型和key基本一样,通常为:数字(整数,浮点数),string,map,struct;
    
    map的声明
        注意:map声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用;map是无序的;
 
map的使用方式:
        var mp map[string]string    
        mp = make(map[string]string, 10)  // make的作用就是给map分配数据空间     
        mp["no1"] = "宋江"     
        mp["no2"] = "吴用"     
        mp["no3"] = "武松"     
        mp["no1"] = "鲁智深"     
        fmt.Println(mp)  // map[no1:鲁智深 no2:吴用 no3:武松]    
 
        // 第二种定义方式 (推荐)     
        cities := make(map[string]string)     
        cities["no1"] = "北京"     
        cities["no2"] = "上海"     
        cities["no3"] = "天津"     
        fmt.Println(cities)  // map[no1:北京 no2:上海 no3:天津]     
 
        // 第三种方式     
        var roles map[string]string = map[string]string {"no1": "孙悟空", "no2": "猪八戒", "no3": "沙和尚"}                 
        // roles := map[string]string {"no1": "孙悟空", "no2": "猪八戒", "no3": "沙和尚"}     
        roles["no4"] = "唐僧"     
        fmt.Println(roles)    // map[no1:孙悟空 no2:猪八戒 no3:沙和尚 no4:唐僧]
 
map的crud操作
        map增加和更新:
            map["key"] = value  // 如果key还没有,就是增加,如果key存在就是修改;
        map删除:
            delete(map, "key"); delete是一个内置函数,如果key存在,在删除该key-value,如果key不存在,不操作,但是也不会报错;
            如果希望一次性删除所有的key
                1.遍历所有的key,然后逐一删除;
                2.直接make一个新的空间;
        map查找:
            val, findres := map["key"]
            如果map中存在 key,那么 findres 就会返回true,否则返回false
 
map的遍历
        说明:map的遍历使用for-range 的结构遍历;因为map的key不一定是数字,即使是数字也不一定是连续的数字
 
map的长度
        使用内置函数 len ---> len(map)
 
map切片
        切片的数据类型如果是map,则我们称为 slice of map , map切片, 这样使用则map个数可以动态变化了。[]map[string]string(类比 []int)
        需要用到 切片的append方法
 
map排序
        golang中没有一个专门的方法针对map的key进行排序;
        golang中的map默认是无序的,注意也不是按照添加的顺序存放的,你每次遍历,得到的输出可能不一样;
        golang中的map的排序,是先将key进行排序,然后根据key值遍历输出即可;
        map的排序做法:
            先将map的key 放入到 切片中
            对切片排序 (sort.Ints([]slice))
            遍历切片,然后按照key来输出map的值
map使用细节和注意事项
           1.map是引用类型,遵守引用类型传递的机制,在一个函数接收map,修改后,会直接修改原来的map;
            2.map的容量达到后,再想map增加元素,会自动扩容,并不会发生panic,也就是说map能动态的增长键值对(key-value)
            3.map的value 也经常使用struct 类型,更适合管理复杂的数据(比前面value是一个map更好);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-11-21 10:45  以赛亚  阅读(98)  评论(0编辑  收藏  举报