golang学习之路-24map映射,python中字典

package main

import "fmt"

func main() {
   //map is 一个特殊的数据结构,一种元素对 (pair)的无序集合
   //pair对应一个key(索引)和一个value(值)
   // 所以这个结构也称为关联数组或者字典
   //这是一种能够快速寻找值的理想结构,给定key就可以迅速找到其对应的value
   //Python中称为字典、java Hashtable

   //1、map是引用类型
   //2、注意:在声明时map不需要知道长度,因为map是可以动态增长的
   // 未初始化的map的值是nil,使用len()可以获取map中pair的数目
   //var map_1 map[int]int
   //var mapname map[keytype]valuetype

   var mapLit map[string]int
   //var mapCreated map [string]float32
   var mapAssigned map[string]int
   mapLit = map[string]int{"one":1,"two":2}
   //4、可以用make()构造map,不能用new构造map
   // 如果错误的使用new()分配了一个引用对象,
   // 会获得一个空引用的指针,相当于声明了一个未初始化的变量并且取了它的地址
   mapCreated:=make(map[string]float32)
   mapAssigned = mapLit
   mapCreated["key1"]=4.5
   mapCreated["key2"]=3.1415926
   mapAssigned["two"]=4
   fmt.Printf("Map literal at \"one\" is :%d\n",mapLit["one"])
   fmt.Printf("Map created at \"key2\" is :%f\n",mapCreated["key2"])
   fmt.Printf("Map ass at \"two\" is :%d\n",mapAssigned["two"])
   fmt.Printf("Map literal at \"ten\" is :%d\n",mapLit["ten"])

   //map容量capcity
   map2:=make(map[string]int,100)
   //当map增长到容量上线到容量上限到是哦呼,
   //如果再增加新的key,value,map大小会自动加一,所以处于性能到考虑
   //对于大到map和快速增长到map,即使大概知道容量,也最好先标明
   //example
   //将音阶和对应到音频映射起来
   noteFrequency:= map[string]float32{
      "C0":16.35,"D0":18.35,"E0":20.60,"F0":21.83,
      "G0":24.50,"A0":27.50,"B0":30.87,"A4":440}


   //用切片作为map的值
      //适应场景:一个key对应多个值的情况
      mp1:=make(map[int][]int)
      mp2:=make(map[int]*[]int)

      /*

      场景如下:

         例如,当我们要处理 unix 机器上的所有进程,以父进程(pid 为整形)
         作为 key,所有的子进程(以所有子进程的 pid 组成的切片)作为 value。
          通过将 value 定义为 []int 类型或者其他类型的切片
         就可以优雅的解决这个问题

      */





}
发布了63 篇原创文章 · 获赞 0 · 访问量 1217

猜你喜欢

转载自blog.csdn.net/qq_37463791/article/details/103430083