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 类型或者其他类型的切片 就可以优雅的解决这个问题 */ }