• Go


    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更好);
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    CC
    codeforces 984 E. Elevator
    codeforces 984 D. XOR-pyramid
    codeforces 984 C. Finite or not?
    codeforces 984 B. Minesweeper
    codeforces 984 A. Game
    Loj #6000. 「网络流 24 题」搭配飞行员
    2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest 训练报告
    省赛训练 分块9题
    AC自动机 hdu 2222 Keywords Search
  • 原文地址:https://www.cnblogs.com/guo-s/p/14014838.html
Copyright © 2020-2023  润新知