免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3302 | 回复: 0

[算法] 学习Golang语言(7):类型--字典 [复制链接]

论坛徽章:
6
CU大牛徽章
日期:2013-03-14 14:14:08CU大牛徽章
日期:2013-03-14 14:14:26CU大牛徽章
日期:2013-03-14 14:14:29处女座
日期:2014-04-21 11:51:59辰龙
日期:2014-05-12 09:15:10NBA常规赛纪念章
日期:2015-05-04 22:32:03
发表于 2014-12-31 13:36 |显示全部楼层
字典(Map)

字典(map)是Go语言内置的数据结构,一组键值对的无序集合。
有些地方称之为映射。本文中一律成为字典(map)。
字典(map)也叫做关联数组。因为数组通过索引来查找元素,而字典通过键(key)来查找元素。
字典(map)的容量只受到内存的限制。在一个字典中,所有的键都是唯一的,并且必须支持==和!=操作符的类型。如果试图赋值给同一个键,后赋值的值将会覆盖原有值。

map的创建和填充
map的定义有两种:
1、初始化数据的定义方式。
2、使用make函数来定义。

输出结果:
    Map literal at "one" is: 1
    Map created at "key2" is: 3.141590
    Map assigned at "two" is: 3
    Map literal at "ten" is: 0
其中mapLit使用方法一定义;而mapCreated使用方法二。
---------------------------------------------
map的使用过程中需要注意以下几点:
1、map是无序的,每次打印出来的map都不会一样,它不能够通过index获取,而必须通过key获取;
2、map的长度不是固定的。和slice类似,map也是一种引用类型;
3、内置的len函数同样适用于map,返回map拥有的key的数量;
4、map的值可以很方便的修改。

map的访问

当访问元素所对应的键存在于字典中,那么肯定没有问题,能够获得对应的元素。但是如果不存在呢?
这个时候会返回零值,对于字符串的零值就是"",对于整数的零值就是0.
但是会存在这样的情况:

这个时候会输出:0。但是这个就与A键值对应的值混淆了。Go提供一种方法来解决这个问题。

此时使用X["E"]有两个返回值。一个是值,一个是否存在该键的bool型变量。
也就是:

_, ok := map1[key1] // ok == true if key1 is present, false otherwise

map的删除元素
Go语言提供了内置函数delete,这个函数可以用来从字典中删除元素。

输出结果:
删除元素前map长度为4,删除之后长度为3.<这里使用len函数获取map的长度>。

此外,如果你试图删掉一个不存在于map的键,程序不会报错。只是不会对map有任何影响。

for...range结构
---------------------------------------------
for...range结构可以用于map。

for key, value := range map1 {
   //do something

}
第一返回值为键(key),第二个返回值为值(value)。这两个值是仅仅作用于for循环内部的局部变量。例如:

输出结果:


这里我们同时能看出,map是无序的
---------------------------------------------
如果你只关心值(value),可以这么使用:
for _, value := range map1 {
//do something
}

输出结果:

---------------------------------------------
如果你只关心键(key),可以这么使用:
for key := range map1 {
   fmt.Printf(“key is: %d\n”, key)
}

输出结果:

--------------------总结--------------------
到今天为止我们学习了go语言所有的内置类型。
包括:布尔型、数值型、字符串、数组、slice和map。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP