• Map1


    map是key-value数据结构,又称为字段或者关联数组。类似其他编程语言中的集合,在编程中是经常使用到。

    map的声明:

    基本语法:

      var map变量名 map[keytype]valuetype

    key 可以是什么类型?

      golang中的map,的key 可以是很多种类型,比如 bool,数字,string,指针,channel,还可以是只包含前面几个类型的 接口,结构体,数组

      通常为int、string

      注意:slice,map还有 function 不可以,因为这几个没法用==来判断


    valuetype 可以是什么类型?

      valuetype 的类型和key 基本一样

      通常为:数字(整数,浮点数),string,map,struct

    map声明的举例:

    var a map[string]string
    var a map[string]int
    var a map[int]string
    var a map[string]map[string]string

    注意:声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用。

    func main() {

      //map的声明和注意事项
      var a map[string]string
      //在使用map前需要先make,make的作用就是给map分配数据空间
      a = make(map[string]string, 10)
      a["no1"] = "宋江"
      a["no2"] = "吴用"
      a["no1"] = "武松"
      a["no3"] = "吴用"
      fmt.Println(a)
    }

    对上面代码的说明:

    1)map 在使用前一定要make

    2)make 的key 是不能重复,如果重复了,则以最后这个key-value为准

    3)map 的value 是可以相同的。

    4)map 的key-value 是无序的。


    func make

    func make(Type, size IntegerType) Type

      make 内建函数分配并初始化一个类型为切片、映射、或(仅仅为)信道的对象。 与 new 相同的是,其第一个实参为类型,而非值。不同的是,make 的返回类型 与其参数相同,而非指向它的指针。其具体结果取决于具体的类型:

        切片:size 指定了其长度。该切片的容量等于其长度。第二个整数实参可用来指定不同的容量;它必须不小于其长度,因此 make([]int, 0, 10) 会分配一个长度为0,容量为10的切片。

        映射:初始分配的创建取决于 size,但产生的映射长度为0。size 可以省略,这种情况下就会分配一个小的起始大小。

        信道:信道的缓存根据指定的缓存容量初始化。若 size 为零或被省略,该信道即为无缓存的。

    map使用方式有下面几种,我们分别演示:

    1)方式1

      //声明,这时map=nil
      var cities map[string]string
      //make(map[string]string, 10) 分配一个map空间
      cities = make (map[string]string, 10)

    2)方式2

      //声明,就直接make

      var cities = make(map[string]string)

      func main() {

        cities := make(map[string]string)
        cities["no1"] = "北京"
        cities["no2"] = "天津"
        cities["no3"] = "上海"
        fmt.Println(cities)
      }

    3)方式3

      //声明,直接赋值

      var cities map[string]string = map[string]string {
        "no4" : "成都",
      }

      cities["no1"] = "北京"


      func main() {

        var cities = map[string]string {"no4":"成都"}
        cities["no1"] = "北京"
        fmt.Println(cities)
      }

      也可以用类型推导:

      func main() {

        cities := map[string]string {"no4":"成都"}
        cities["no1"] = "北京"
        fmt.Println(cities)
      }

    课堂练习:演示一个key-value 的value 是map的案例
    比如:我们要存放3个学生信息,每个学生有name和sex信息

    思路:map[string]map[string]string

    案例:

    func main() {

      studentMap := make(map[string]map[string]string, 10)
      studentMap["stu01"] = make(map[string]string, 3)
      studentMap["stu01"]["name"] = "tom"
      studentMap["stu01"]["sex"] = "男"
      studentMap["stu01"]["address"] = "北京长安街"

      studentMap["stu02"] = make(map[string]string, 3)   //这句话不能少
      studentMap["stu02"]["name"] = "mary"
      studentMap["stu02"]["sex"] = "女"
      studentMap["stu02"]["address"] = "北京东沙村"

      fmt.Println(studentMap["stu01"])
      fmt.Println(studentMap["stu02"]["address"])
    }

  • 相关阅读:
    Codeforces Round #622 (Div. 2)
    Knapsack Cryptosystem 牛客团队赛
    HDU 2586(LCA欧拉序和st表)
    P3865 【模板】ST表
    P2023 [AHOI2009]维护序列 区间加乘模板
    P1558 色板游戏 线段树(区间修改,区间查询)
    Codeforces Round #621 (Div. 1 + Div. 2) D
    Codeforces Round #620 (Div. 2) E
    Educational Codeforces Round 82 (Rated for Div. 2)
    洛谷P1638 逛画展
  • 原文地址:https://www.cnblogs.com/green-frog-2019/p/11403034.html
Copyright © 2020-2023  润新知