• 技术文章 >后端开发 >Golang

    golang中map是什么

    青灯夜游青灯夜游2023-01-14 10:42:20原创84

    在golang中,map是一种特殊的数据结构,是一个key(索引)和value(值)形式的无序的集合,也可以称为关联数组或字典;map是一种能够快速寻找值的理想结构,是能够快速根据给定key,找到对应的value的数据结构。

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    Go语言中 map 是一种特殊的数据结构,一种元素对(pair)的无序集合,pair 对应一个 key(索引)和一个 value(值),所以这个结构也称为关联数组或字典,这是一种能够快速寻找值的理想结构,给定 key,就可以迅速找到对应的 value。

    Golang 的 map 的 key 可以是任何可以使用 == 进行比较的 数据类型,比如 int、string、bool 等,value 可以是任意的类型。

    map 是一个无序的数据结构,因此同一个 map,每次遍历获取的顺序很可能是不一致的。

    map 概念

    map 是引用类型,可以使用如下方式声明:

    var mapname map[keytype]valuetype

    其中:

    提示:[keytype] 和 valuetype 之间允许有空格。

    在声明的时候不需要知道 map 的长度,因为 map 是可以动态增长的,未初始化的 map 的值是 nil,使用函数 len() 可以获取 map 中 pair 的数目。

    【示例】

    package main
    import "fmt"
    func main() {
        var mapLit map[string]int
        //var mapCreated map[string]float32
        var mapAssigned map[string]int
        mapLit = map[string]int{"one": 1, "two": 2}
        mapCreated := make(map[string]float32)
        mapAssigned = mapLit
        mapCreated["key1"] = 4.5
        mapCreated["key2"] = 3.14159
        mapAssigned["two"] = 3
        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 assigned at \"two\" is: %d\n", mapLit["two"])
        fmt.Printf("Map literal at \"ten\" is: %d\n", mapLit["ten"])
    }

    输出结果:

    1.png

    示例中 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的时候,编译器会报错:

    invalid operation: mapCreated["key1"] (index of type *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}

    【相关推荐:Go视频教程编程教学

    以上就是golang中map是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:map Golang go语言
    上一篇:go语言怎么获取字符串长度 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • es6 map有序吗• es6中map和object的区别是什么• golang map怎么删除元素• js map方法是es6的吗• es6 map是引用类型吗• Go语言字符串怎么转为数组• golang中有没有类• golang支持跨平台吗
    1/1

    PHP中文网