golang中map的概念是什么
导读:本文共2434字符,通常情况下阅读需要8分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 在golang中,map是一种特殊的数据结构,是一个key(索引)和value(值)形式的无序的集合,也可以称为关联数组或字典;map是一种能够快速寻找值的理想结构,是能够快速根据给定key,找到对应的value的数据结构。Go语言中 map 是一种... ...
目录
(为您整理了一些要点),点击可以直达。
在golang中,map是一种特殊的数据结构,是一个key(索引)和value(值)形式的无序的集合,也可以称为关联数组或字典;map是一种能够快速寻找值的理想结构,是能够快速根据给定key,找到对应的value的数据结构。
Go语言中 map 是一种特殊的数据结构,一种元素对(pair)的无序集合,pair 对应一个 key(索引)和一个 value(值),所以这个结构也称为关联数组或字典,这是一种能够快速寻找值的理想结构,给定 key,就可以迅速找到对应的 value。
Golang 的 map 的 key 可以是任何可以使用 == 进行比较的 数据类型,比如 int、string、bool 等,value 可以是任意的类型。
map 是一个无序的数据结构,因此同一个 map,每次遍历获取的顺序很可能是不一致的。
map 概念
map 是引用类型,可以使用如下方式声明:
varmapnamemap[keytype]valuetype
其中:
mapname 为 map 的变量名。
keytype 为键类型。
valuetype 是键对应的值类型。
提示:[keytype] 和 valuetype 之间允许有空格。
在声明的时候不需要知道 map 的长度,因为 map 是可以动态增长的,未初始化的 map 的值是 nil,使用函数 len() 可以获取 map 中 pair 的数目。
【示例】
packagemainimport"fmt"funcmain(){varmapLitmap[string]int//varmapCreatedmap[string]float32varmapAssignedmap[string]intmapLit=map[string]int{"one":1,"two":2}mapCreated:=make(map[string]float32)mapAssigned=mapLitmapCreated["key1"]=4.5mapCreated["key2"]=3.14159mapAssigned["two"]=3fmt.Printf("Mapliteralat\"one\"is:%d\n",mapLit["one"])fmt.Printf("Mapcreatedat\"key2\"is:%f\n",mapCreated["key2"])fmt.Printf("Mapassignedat\"two\"is:%d\n",mapLit["two"])fmt.Printf("Mapliteralat\"ten\"is:%d\n",mapLit["ten"])}
输出结果:
示例中 mapLit 演示了使用{key1: value1, key2: value2}的格式来初始化 map ,就像数组和结构体一样。
上面代码中的 mapCreated 的创建方式mapCreated := make(map[string]float)
等价于mapCreated := map[string]float{}
。
mapAssigned 是 mapList 的引用,对 mapAssigned 的修改也会影响到 mapLit 的值。
注意:可以使用 make(),但不能使用 new() 来构造 map,如果错误的使用 new() 分配了一个引用对象,会获得一个空引用的指针,相当于声明了一个未初始化的变量并且取了它的地址:
mapCreated:=new(map[string]float)
接下来当我们调用mapCreated["key1"] = 4.5的时候,编译器会报错:
invalidoperation:mapCreated["key1"](indexoftype*map[string]float).
map 容量
和数组不同,map 可以根据新增的 key-value 动态的伸缩,因此它不存在固定长度或者最大限制,但是也可以选择标明 map 的初始容量 capacity,格式如下:
make(map[keytype]valuetype,cap)
例如:
map2:=make(map[string]float,100)
当 map 增长到容量上限的时候,如果再增加新的 key-value,map 的大小会自动加 1,所以出于性能的考虑,对于大的 map 或者会快速扩张的 map,即使只是大概知道容量,也最好先标明。
这里有一个 map 的具体例子,即将音阶和对应的音频映射起来:
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}
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
golang中map的概念是什么的详细内容,希望对您有所帮助,信息来源于网络。