注册 登录

清河洛

Go语言中的Map映射

qingheluo2021-09-04清河洛414
Map是通过key来快速检索数据,key类似于索引,指向数据的值我们可以像迭代数组和切片那样迭代它。但是由于Map是一种无序的键值对的集合(使用hash表来实现),无法决定它的返回顺序。类似于python中的集合dictMap的声明var map_variable map [key_data_type] value_data_type 也可以使用make函数 var map_variable = make( map [key_data_type] value_data_type ) 如果不初始化map,那么就会创建一个nil map Map的初始化声明一个nil map然后使用若干个...

Map是通过key来快速检索数据,key类似于索引,指向数据的值

我们可以像迭代数组和切片那样迭代它。

但是由于Map是一种无序的键值对的集合(使用hash表来实现),无法决定它的返回顺序。

类似于python中的集合dict

Map的声明

var map_variable map [key_data_type] value_data_type

也可以使用make函数
var map_variable = make( map [key_data_type] value_data_type )

如果不初始化map,那么就会创建一个nil map

Map的初始化

声明一个nil map然后使用若干个
map_variable[key] = val
语句来初始化map

也可以在声明的时候初始化
var demo = map [key_data_type] value_data_type {key1:val1,key2:val2,...}

获取Map的元素值

在Map变量后面使用中括号括起来的key来获取对应的值:map_variable[key]

数组、切片、map,这三种类型中,map的性能是最低的,读取的性能比例大概是 1 : 1.5 : 25

判断某个元素是否存在

val , isset = map_variable[key]
以上语句val为元素的值,isset为该元素是否存在的bool值
当元素不存在时val为value_data_type的默认值

delete(map,key):删除map变量中的key对应的元素

map键的类型

因为 map 需要能够判断两个键是否相等以确保每个键的唯一性,所以map键的数据类型必须是可比较的,即要求该类型支持 == 和 != 操作符

可以作为 map 键的类型

基本类型,几乎所有的基本类型(整型、浮点型、字符串、布尔型等),因为它们都支持相等性比较
指针类型,因为指针的比较是基于指向的内存地址的
接口类型,只要接口的动态类型是可比较的
结构体类型,只要其所有字段都是可比较的
数组类型,只要数组中的元素类型是可比较的

不能作为 map 键的类型

切片类型,因为切片是引用类型,其内容可能会变化,使得比较操作不确定
函数类型,因为 Go 语言中没有为函数定义相等性比较操作
map 类型,因为也是引用类型,且没有定义相等性比较操作
任何包含上述不可比较类型的复合类型,也不能作为 map 的键


网址导航