golang中map的概念是什么(golang,map,编程语言)

时间:2024-05-07 04:26:19 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

在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"])}

输出结果:

golang中map的概念是什么

示例中 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的概念是什么的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:laravel8.x用户认证vite指令不生效如何解决下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18