Go 语言入门 10—Map
Map
map 是一种键值对形式的数据结构,一个键对应一个值,可以通过键快速检索出其对应的 value 值,在 map 中 key 的值是唯一的,value 的值不唯一,并且 map 中保存的数据是无序的。
Map 声明
声明 Map 可以使用 map 关键字进行声明,同时也可以通过 make 函数进行声明,仅仅通过 map 关键字声明的 map 为 nil map,没有初始化的情况无法使用,如果直接往 map 里面赋值会发生 panic,使用 make 函数声明后 map 才会在分配内存空间,且可以正常使用。
语法:
基本使用代码示例:
运行结果:
map 中的键是唯一的,如果在 map 中已经存放了一个 key 对应的 value,再次存放一样的 key 进去就会覆盖之前的 value。
在使用 map 关键字声明一个 map 时,由于是 nil map,所以直接使用会报 panic,但是可以在声明时直接初始化赋值,这样使用时就不会导致 panic,申明初始化方式如下:
循环遍历
map 可以使用for range
循环进行遍历,遍历是会得到 map 中的 key 集合,然后使用 key 即可获取到 map 的 value。
代码示例:
运行结果:
查看元素是否存在
使用 map 名加中括号的方式获取一个 key 对应的 value,如果当 key 不存在时,获取到的就是 map 声明时对应类型的默认值,例如var m map[string]int
,如果这时候获取一个不存在的 key,返回的就是 0,那么我们要如何才能知道返回的 0 是代表不存在这个 key 还是这个 key 对应的 value 本来就是 0 呢?
其实对于这个问题的解决方法很简单,在 map 通过中括号取值时,不只是返回一个值,还会返回一个 bool 类型,这个类型就代表了当前需要查找的 key 是否存在。
代码示例:
在上述代码中,m 中有 key 为 zero 对应的值为 0,所以直接通过m["zero"]
取值,获取到的 ok 为 true,且 value=0,但是在使用m["three"]
取值时,由于 m 中没有 three 这个 key,所以获取到的 ok 为 false,value 同样也是 0。
运行结果:
删除元素
在使用 map 时还可以通过 delete 函数删除 map 中的元素,使用 delete 函数时需要指定两个参数,第一个参数为需要操作的 map,第二个参数为需要删除的 key。
代码示例:
由于删除了 two 这个 key,所以再次通过这个 key 取值的时候就会提示two不存在
运行结果:
版权声明: 本文为 InfoQ 作者【良猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/90c8ef57ec1b002b9ef707617】。文章转载请联系作者。
评论