今天是golang特辑的第7篇文章,我们来谈谈map在golang中的使用方法吧。
map这种数据结构很常用,它包含密钥-值对。 在C /java中叫做地图,在Python中叫做光盘。 这些数据结构的名称不一样,但背后的技术支持也不一定一样。 例如,c的map由红色和黑色的树实现,而Java的hashmap则通过hash表实现。 但是,使用方法几乎一样。 除了Java通过get方法获取键值之外,c、Python和golang都是用方括号获取的。
声明与初始化
golang的map声明非常简单。 用map关键字声明map,在方括号内填入key的类型,在方括号外填入value的类型。
var m地图字符串整数
这样我们就宣布了map。
但是,请注意,这样声明的是空的map,map的零值为nil,可以理解为空的指针。 所以我们不能直接操作这个m。 不这样做的话,就会得到panic。
panic :分配种子地图
panic表示golang中一个非常严重的不可恢复的错误。 可恢复的错误类似于Java和其他语言的异常。 发生异常时,选择handle,程序可以不崩溃地继续执行。 那些非常严重,无法处理的异常在golang中被称为panic。
golang的异常处理机制与其他语言有很大不同,整体逻辑和内核不太一样。 当然这是个比较大的话题,所以在这里简单地理解为error就可以了。
返回到map,我们声明map后,要使用它就需要初始化。 使用make方法创建实例的方法也很简单。 这与以前在make中创建元组很相似。
m=make (地图字符串整数) )。
//也可以指定创建的map的存储能力的大小
m=make (地图字符串整数,100 ) )。
宣言的时候也可以写初始化:
varm=map int ' ABC ' :3,' ccd': 4}
当然,也可以使用赋值运算符直接从make中导出空的map。
m :=make (地图字符串整数)
增删改查
map做好后当然要用,但整体上和Python的dict很像,简单直观,不怎么绕圈子。 让我们逐一看看。 首先是map的添加元素。 map的追加要素用方括号直接代入即可:
m“亚太”=4
同样,需要保证这里的m已经初始化。 否则,nil的panic也会打包。 如果map中已经存在key的值,则会自动替换原始key。 也就是说,map的更新和元素的添加都是一样的,都是用这个方法进行的。 如果不存在就添加,否则更新。
删除元素也很容易,和Python类似。 用delete关键字删除。
删除(米,' abc ' ) ) ) ) ) ) ) )。
我们删除key时,如果是其他语言,就需要判断该key值是否存在。 否则无法删除,或者有可能引起异常。 在golang不是这样。 我对这个进行了优化。 如果要删除的密钥的值原本不在map中,则在调用delete后不会发生任何事情。 只有一个,必须保证传入的map不是nil。 否则,也会发生panic。
最后,让我们来看看元素的搜索。 在Java和Python中,Java通过容器密钥、Python通过in操作员等几个判断语句进行判断。 golang直接用方括号询问,但存在如果没有key怎么办的问题。
在其他语言中,直接访问不存在的key时会引发异常,但由于会返回其他bool类型的元素以指示是否找到元素,因此golang不会触发panic。 因此,可以同时用两个变量接收。 如果第二个变量为True,则表示搜索成功。
此外,还可以将此逻辑与if初始化操作结合起来。
if val,ok :=米[ ' 1234 ' ]; 好的
FMT.println(val ) )。
}
这里的ok表示搜索是否成功。 这在golang中也是map检索的惯用表达。
最后,让我们来看看实际使用map的例子。 map将为统计字符串中的单词数生成wordCount。
打包主
import (
' golang.org/x /托尔/WC '
' strings '
)
funcwordcount(sstring )地图[字符串]整数
CNT :=make (地图字符串整数) )
//用分割方法分割字符串
for _,str :=范围字符串.分割(s
//直接就可以了。 golang自动填充
中央电视台
}
返回中央电视台
}
功能主()
WC .测试(世界计数) )。
(}
总结
到此为止,我已经介绍了在golang上使用地图的情况。 可以看出,map一如既往地体现了golang语法简化的特点。 例如,如果在返回错误的操作中省略了判断要素是否在map中的操作,一开始我觉得有点不习惯,但是接触多了就会发现这些都有出路。 golang的道路很简单,可以节约,简单不复杂。
这不仅是map,其他特性也一样。 在那之后的内容中,我们会继续感受那个。
如果你喜欢正文,可以的话,请跟进,稍微鼓励一下。 也便于获取更多的文章。