Go语言程序设计(六)字典(映射)

文章介绍了Go语言中的Map数据结构,它是一种键值对的集合,提供快速的查找速度。Map在声明时需指定键和值的类型,键必须是可比较的类型。初始化或创建字典可通过初始化语法或make函数,未初始化的字典不能添加元素。文章还讨论了如何通过键访问和操作字典,包括查找和删除键值对的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

        在Go语言中,Map是一种特殊的数据结构,它由一对无序的数据项组成,被称为键值对(Key-value Pair)。其中的一项是键(Key),另外一项是值(Value), Map通过把键映射到值来进行访问,这种方式可以加快数据查找的速度。所以,Map通常也被称作字典(Dictionary)或哈希表(Hash table) ,本文统一称为“字典"。

二、字典的声明

        字典也是一种引用数据类型,在声明字典时,除了要定义字典名,还要指定“键”类型和“值”类型,“键”类型要使用一对方括号“[ ]”括起来。字典一般声明格式如下:

var mapName map[keyType]valueType

说明:

  • (1)字典名的命名规则和变量名相同,遵循标识符命名规则。
  • (2)不要给字典指定长度,字典的长度会在初始化或创建过程中动态增长。
  • (3) Key必须是支持比较运算(==、!=)的数据类型,比如整型、浮点型、指针、数组、结构体、接口等,而不能是函数、字典、切片这几种类型。
  • (4)Value类型可以是Go语言的任何基本数据类型。

三、字典的初始化和创建

        字典声明好后必须经过初始化或创建才能使用,未初始化或创建的字典值为nil。可以使用“{}”操作符对字典进行初始化,或使用make()函数来创建字典。初始化或创建后,就可以使用“=”操作符向字典动态增添数据项了。
        例如,下面的操作语句编译时会出错:

var map1 map[ string ]int
map1["key1"]= 1

        出错的原因是虽然声明了字典map1,但mapl没有被初始化,所以系统并没有给它分配存储空间,也就不能向mapl中添加数据项了。
        下面的操作语句是正确的:

var map1 map[string]int {}
map1["key1"]= 1

        上面的操作语句正确,因为在声明字典map1的同时使用“{}”操作符对字典进行了初始化,也就意味着系统给map1分配了存储空间,当然就可以使用“=”操作符向mapl添加数据项了。
        下面的操作也是可行的:

var map1 map[ string ] int
map1 = make(map[string]int)
map1["key1"]= 1

        这里首先声明字典map1,然后使用make()函数来创建map1,make函数操作的实质就是给map1分配存储空间,所以make后也可以使用“=”操作符向map1添加数据项。

四、字典的访问和操作

字典是通过Key来访问Value的,访问格式如下:

Value = mapName[Key]

        字典使用键值的访问形式和数组使用下标的访问形式有些类似,其实数组可以看作是一个键值类型为整型的字典。访问以后就可以对字典中的键值对进行查找或删除操作了。

1、字典项查找

        在Go语言中,要从字典中查找一个特定的键值对,可以通过下面语句来实现:

v,OK := mapName[Key]

        这条语句执行后,如果查找的Key值存在,则将Key对应的Value值赋予v,OK为true,反之,如果Key不存在,则v等于0,OK为false。

2、字典项删除

        内置函数delete(),用于删除容器内的元素。

delete(map1, "key1")

        上面语句表示从map1中删除键值为“key1”的键值对,如果这个健不存在,那么什么也不会发生,也不会产生什么副作用。但是如果传入的Map变量值是nil,该调用将会导致程序出现异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值