字典(map)存储的是键值对(key-value pair,一个键值对代表了一对键和值。一个键和一个值分别代表了一个从属于某一类型的独立值,把它们两个捆绑在一起就是键值对,也称“键-元素对”)的集合

  Go语言的字典类型其是由一个哈希表特定实现的,在这个实现中,键和元素最大不同在于,前者的类型是受限的,后者却可以是任何类型 

 package main

 import (
"fmt"
) func main() {
aMap := map[string]int{
"one": ,
"two": ,
"three": ,
}
k := "two"
v, ok := aMap[k]
if ok{
fmt.Printf("THe element of key %q: %d\n", k, v)
}else {
fmt.Println("Not found!")
}
}

  在哈希表中查找某个键值对应的那个元素值,需要先把键值作为参数传给这个哈希表,哈希表会先用哈希函数把键值转换为哈希值。哈希值通常是一个无符号的整数,一个哈希表会持有一定数量的桶(bucket,哈希桶),这些哈希桶会均匀地存储其所属哈希表收纳的那些键值对。哈希表会先用这个键的哈希值的低几位去定位到一个哈希桶,然后再到这个哈希桶中查找这个键,由于键值对是捆绑在一起存储的,所以一旦找到了键,就一定能找到对应的元素值。随后哈希表就会把相应的元素值作为结果返回

1、字典的键类型不能是哪些类型?

  Go语言规范规定,在键类型的值之间必须可以施加操作符==和!=,即键类型的值必须要支持判等操作。由于函数类型、字典类型、切片类型不支持判等操作,所以字典的键类型不能是这些类型。

  不建议使用高级数据类型(数组、接口、结构体)作为字典的键类型,它们的值求哈希较慢,并且它们的值中存在变数(可以修改其中的元素值),还需要对其内部元素类型进行判断  

  如键的类型是数组类型,那么还要确保该类型的元素类型不是函数类型、字典类型或切片类型

2、应该优先考虑哪些类型作为字典的键类型?

  求哈希和判等操作的速度越快,对应的类型就越适合作为键类型

  宽度(单个值需要占用的字节数,如bool、int8的字节宽度都是1)越小的类型速度通常越快。对高级类型,如数组类型的值求哈希实际上是依次求得它的每个元素的哈希值并进行合并

  因此优先选用数值类型和指针类型作为字典的键类型

3、在值为nil的字典上执行读操作会成功吗?那写操作呢?

  由于字典是引用类型,所以当我们仅声明而不初始化一个字典类型的变量的时候,它的值会是nil

  除添加键值对,在一个值为nil的字典上做任何操作都不会引起错误。当试图在一个值为nil的字典中添加键值对时,会抛出panic

[Go]字典(map)的操作和约束的更多相关文章

  1. Python复习笔记-字典和文件操作

    抽时间回顾2年前自己做过的python工具,突然感觉不像自己写的,看来好久没用过python的字典和文件操作了,查询资料和网页,整理如下: 一.字典 键值对的集合(map) 字典是以大括号“{}”包围 ...

  2. Python3 字典(map)

    ayout: post title: Python3 字典(map) author: "luowentaoaa" catalog: true tags: mathjax: true ...

  3. python 字典的常见操作

    字典 字典的增删改查 字典的创建方式: # 创建字典类型 info = { 'name':'李白', ', 'sex':'男' } msg = { 'user01':'Longzeluola', 'u ...

  4. python数据类型:字典dict常用操作

    字典是Python语言中的映射类型,他是以{}括起来,里面的内容是以键值对的形式储存的: Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的. Value:任意数据(int,str,boo ...

  5. python(二)——list、字典、字符串操作

    列表——list 假设一种场景,想要存班里所有同学的名字,那应该拿什么存呢? 我们可以拿一个字符串去存,例如: stus = "s1,s2,s3,s4,s5……sn" 那我们要从里 ...

  6. Objective-C:NSDectionary字典的常见操作

    NSDectionary字典:它是一个存储键值的容器,每一个键key都对应着一个值value,可以通过键key一次性找到目标值value,这是一个比较好的存储器,相比于数组而言,它明显提高了查询效率. ...

  7. [PY3]——内置数据结构(7)——字典及其常用操作

    字典及其常用操作Xmind图 关于字典 字典是一种key-value结构 字典是无序的 字典的定义 # {}大括号可以直接定义一个空字典 In [1]: d={};type(d) Out[1]: di ...

  8. python3.0 day02 列表、元组 、字典、字符串操作

    1.列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作,类似于其他语言中的数组. 定义列表 names = ['Lioa',"Tenglan ...

  9. dict字典;dict的操作

    一.字典: 1. 字典 dict 用{}来表示 键值对数据 {key:value} 唯一性 键   都必须是可哈希的 不可变的数据类型就可以当做字典中的键 值   没有任何限制 1.1  字典的创建: ...

  10. python之字典的相关操作

    一.什么是字典 dict 用{}表示,用来存放键值对数据 {key:value} 键:具有唯一性,不能重复,不可变 必须是可哈希的(不可变的数据类型) 字典是无序的,没有索引 值: 没有任何限制 已知 ...

随机推荐

  1. selenium2+python自动化1-操作浏览器

    随着测试行业的发展,现在不论在找工作还是在实际的工作中,对要求掌握自动化越来越普遍,在这里就记录一下一些入门的知识,希望对阅读者能有一些帮助吧!好哒,步入正题,这一篇主要记录下如何用Python调用w ...

  2. Backbone学习记录(2)

    创建一个集合 1)new Backbone.Collection()方式 var user=new Backbone.Model({'name':'susan'}); var list=new Bac ...

  3. Problem D: 勤奋的涟漪2 dp + 求导

    http://www.gdutcode.sinaapp.com/problem.php?cid=1049&pid=3 dp[i][state]表示处理了前i个,然后当前状态是state的时候的 ...

  4. Java GUI 布局管理器

    容器可设置布局管理器,管理容器中组件的布局: container.setLayout(new XxxLayout()); Java有6种布局管理器,AWT提供了5种: FlowLayout Borde ...

  5. 客户端配置snmpd

    [root@ localhost]#yum install net-snmp (3)安装后打开默认的/etc/snmp/snmpd.conf文件,更改如下配置: 1) 查找以下代码: # sec.na ...

  6. Javaweb学习笔记6—EL表达式与JSTL及自定义标签

    今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps: ...

  7. Git搭建自己的网站服务器(Linux)

    git服务器弄了半天终于搞定了,还是记录下吧,不然下次有得忘了 流程: 服务器 构建git目录 git用户,git组作为仓库管理 ssh授权(远程无需密码接入) hook(post-receive)自 ...

  8. C# 递归读取XML菜单数据

    在博客园注册了有4年了,很遗憾至今仍未发表过博客,趁周末有空发表第一篇博客.小生不才,在此献丑了! 最近在研究一些关于C#的一些技术,纵观之前的开发项目的经验,做系统时显示系统菜单的功能总是喜欢把数据 ...

  9. select2宽度占比100%,导致无法实现浮动效果

  10. C程序(1)