字典是一个容器,它存储多个相同类型的值。每个值都与一个唯一的密钥,它作为一个标识符字典内的值相关联。不像在一个数组项,在字典中的项目没有一个指定的顺序。您可以使用一本字典,当你需要查找基于其标识符值,在大致相同的方式,一个真实世界的字典来查找定义为一个特定的词。

Swift的字典不同于Objective-C的NSDictionary中和的NSMutableDictionary类,它可以使用任何类型的对象作为其键和值,不提供有关这些对象的性质的任何信息。Swift,钥匙和一个特定的字典可存储的值类型总是明确,无论是通过显式类型批注或通过类型推断。

Swift的字典类型写为Dictionary<KeyType,ValueType>,其中KeyType的是价值,可以用来作为字典的键的类型和值类型是值类型的字典中存储这些密钥。

唯一的限制是,关键字类型必须是可哈希的,也就是说,它必须提供一种方式,使自己唯一表示的。所有的斯威夫特的基本类型(如字符串,整数,双精度和布尔)是哈希默认情况下,所有这些类型都可以作为字典的键。无关联的值枚举成员的值(如枚举描述)也可哈希的默认。

您可以初始化字典与字典的文本,这也有类似的语法文字前面见过的数组。字典文字是一种简写方式来写一个或多个键 - 值对的字典集合。

一键 - 值对的键和值的组合。在字典中的文字,在每个键 - 值对的键和值用冒号隔开。键 - 值对被写为一个列表,以逗号分隔,由一对方括号括:

[key1:value1, key2: value2, key3: value3]

下面的示例创建一个字典来存储国际机场的名字。在字典中,键是三个字母的国际航空运输协会代码和值是机场名称:

var airports: Dictionary<String, String>= ["TYO": "Tokyo","DUB": "Dublin"]

airports字典包含两个键 - 值对初始化。第一对具有“TYO”的键和“Tokyo”的值。第二对具有“DUB”的键和“Dublin”的值。
这本词典的文字包含两个字符串:字符串对。这符合airports变量声明的类型(只有String键,只有字符串值的字典)等的字典文字的赋值是允许的,以此来初始化airports字典,两个初始项目。

正如数组,你不必写字典的类型,如果你初始化它与一个字典文字,其键和值具有一致的类型。机场的初始化可能已被写入一个较短的形式,而不是在:

var airports = ["TYO": "Tokyo", "DUB":"Dublin"]

因为在字面的所有键都是同一类型,同样所有的值都是相同类型的对方,Swift可以推断词典<String, String>,字符串是正确的类型要用于airports字典。

访问和修改字典

可以访问和修改一个字典,通过它的方法和属性,或使用下标语法。正如一个数组,你可以找出项目在字典的count属性计数来检查个数:

println("The dictionary ofairports contains \(airports.count) items.")

// prints "The dictionary of airports contains 2 items."

您可以添加一个新的项目到与标语法字典。使用适当类型的新键作为下标索引,并指定相应类型的新值:

airports["LHR"] = "London"


// theairports dictionary now contains 3 items

你也可以改变”LHR”的值

airports["LHR"] = "London Heathrow"


// the value for "LHR" has been changed to "LondonHeathrow"

使用字典的updateValue(forKey:)方法来设置或更新一个特定的键的值。像上面的例子标,该updateValue(forKey:)方法设置一个值,如果不存在一个键,或更新,如果该键已经存在的价值。不像一个下标,但是,updateValue(forKey:)方法执行更新后返回旧值。这使您可以检查是否没有更新发生。

if let oldValue = airports.updateValue("Dublin International", forKey: "DUB"){

println("The old value for DUB was \(oldValue).")

}


// prints "The old value for DUB was Dublin."

您也可以使用下标语法来从字典为特定的键检索值。因为它有可能要求对没有存在价值的关键,字典的下标返回字典的值类型的可选值。如果字典包含请求的密钥值,下标返回一个包含该键的现有值的可选值。否则,下标返回nil:

if let airportName = airports["DUB"]{


println("The name of the airport is \(airportName).")


}else{


println("That airport is not in the airportsdictionary.")

}


//prints "The name of the airport is Dublin International."

您可以使用下标语法来通过该键的分配为零的值从字典中删除一个键 - 值对:

airports["APL"] = "Apple International"


// "Apple International" is not the real airport for APL, sodelete it

airports["APL"] = nil

// APLhas now been removed from the dictionary

另外,从与removeValueForKey法词库中删除一个键 - 值对。此方法删除的键值对,如果它存在,并返回被删除的值,或者返回nil,如果存在没有价值:

if let removedValue = airports.removeValueForKey("DUB") {

println("The removed airport'sname is \(removedValue).")

}else{

prints "The removed airport's name is Dublin International."

}


//prints "The removed airport's name is Dublin International."

遍历一个字典

我们可以使用for-in来遍历一个字典

for (airportCode, airportName)in airports {

println("\(airportCode): \(airportName)")

}

.      // TYO:Tokyo

.      // LHR:London Heathrow

也可以通过访问其键和值检索的字典的键或值的可重复的集合特性:

for airportCode in airports.keys {

println("Airport code: \(airportCode)")

}

.     // Airport code: TYO

.     // Airport code: LHR

for airportName in airports.values {

println("Airport name: \(airportName)")

}


// Airport name: Tokyo

//Airport name: London Heathrow

如果需要使用字典的键或值与一个API,它需要一个Array实例,初始化一个新的数组中的键或值属性:

.    let airportCodes = Array(airports.keys)

.      //airportCodes is ["TYO", "LHR"]

.      let airportNames = Array(airports.values)

.      //airportNames is ["Tokyo", "London Heathrow"]

初始化一个字典

.    var namesOfIntegers = Dictionary<Int, String>()

.     // namesOfIntegers is an emptyDictionary<Int, String>

Swift--数组和字典(二)相关推荐

  1. Swift 数组、字典

    1 import Foundation 2 3 // 数组 4 var arr = ["Hello","jinapangpang",100,2.3] 5 var ...

  2. 3. Swift 数组|字典|集合

    在OC中数组,字典,集合有自己的表示方法,分别是Array,Dictionary,Set 与 String 都属于数值类型变量,他们都属于结构体. 使用简介灵活多变,个人感觉可读性变差了很多,用起来由 ...

  3. pycharm定义空的二维数组_Excel VAB入门(二)数组和字典

    数组和字典也是VBA的常用到数据类型之一.但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典. 事实上,字典不是VBA内置的类型,它是Wind ...

  4. VBA 二维数组和字典

    数据源: 二维数组和字典的主要使用方法 Sub test()Dim dict As ObjectSet dict = CreateObject("Scripting.Dictionary&q ...

  5. vba数组如何精确筛选_VBA数组与字典解决方案第8讲:为什么要采用数组公式(二)...

    大家好,今日继续讲解VBA数组与字典解决方案,今日的内容是第8讲.在上一讲的数组专题中,我详细地讲了利用数组公式的好处,或许有的朋友还没有充分理解,今日继续给大家讲解.我在讲解中,力争每篇文章可以作为 ...

  6. vba数组如何精确筛选_VBA数组与字典解决方案第10讲:数组及数组公式的制约性和集合性二...

    今日继续讲解VBA数组与字典解决方案,的内容是第10讲,今日继续给大家讲解数组及数组公式结果的制约性和集合性,上节讲到截图的结果返回的是3,而不是0!这是为什么呢?我们仍然看下面的截图: 再次回顾E5 ...

  7. iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据

    iOS开发:沙盒机制以及利用沙盒存储字符串.数组.字典等数据 1.初识沙盒:(1).存储在内存中的数据,程序关闭,内存释放,数据就会丢失,这种数据是临时的.要想数据永久保存,将数据保存成文件,存储到程 ...

  8. tp5数组为什么要中括号_VBA数组与字典解决方案第7讲:为什么要采用数组公式(一)...

    VBA数组与字典解决方案第7讲:为什么要采用数组公式(一) 今日继续讲解VBA数组与字典解决方案第7讲,在前几讲的数组应用中我们深入地讲解了工作表数组和数组公式,以及数组维数扩展的意义.那么,有的朋友 ...

  9. vba 数组赋值_VBA数组与字典解决方案第18讲:VBA中静态数组的定义及创建

    大家好,我们今日继续讲解VBA数组与字典解决方案,今日讲解第18讲:VBA数组如何定义,又该如何创建呢? 从这一讲开始,我们开始进入VBA数组阶段,VBA数组和工作表数组有着不同的意义,在很大程度上, ...

  10. 数组字典_VBA数组与字典解决方案第1讲:函数,公式,数组,数组公式的概念...

    各位好,从今日开始,在平台上我将推出VBA解决方案系列丛书的第三部:VBA数组与字典解决方案,这套书从工作表数组开始讲解,逐渐过渡到VBA数组和VBA字典,在这部教程中,大家会看到VBA数组.字典在各 ...

最新文章

  1. 推荐一款 Flutter Push 推送功能插件
  2. C#前期绑定和后期绑定操作Excel-------实现简单打印功能
  3. 利用cors,实现js跨域访问Tomcat下资源
  4. 手持“六脉神剑”、横跨软硬领域,揭晓英特尔构筑智慧云基石宝典!
  5. css3 修改checkbox disabled颜色_HTML5 + CSS3 gt;gt;gt; 009
  6. Android JOSON应用及详解
  7. 愿天下有情人都是失散多年的兄妹
  8. CTS测试中testCameraOrientationAlignedWithDevice项
  9. hive创建新表——基础
  10. 职位名称PM、RD、QA、OP英文缩写
  11. 怪物之心无法触发_异度之刃2解锁稀有异刃力男支线怪物之心BOSS位置攻略
  12. 直观理解Beta分布
  13. 台式计算机usb接口无反应6,win7电脑usb接口没反应如何解决 电脑usb接口没反应解决方法...
  14. 摄像机服务器端返回消息错误,_平安城市_视频监控(本科)毕业论文设计.doc
  15. 程序员转行中,深入研究一下产品经理岗,有兴趣的一起来学习进步吧!
  16. mysql查询男生基本情况_MYSQL查询操作 详细
  17. 【Java习题1】模拟豆机游戏
  18. 【开关电源RC吸收电路matlab simulink仿真】
  19. (王道考研计算机网络)第五章传输层-第一节:传输层概述、功能和端口
  20. C++实现二叉树的递归遍历与非递归遍历

热门文章

  1. java实现串口ymodem 传输文件_活久见!Jmeter也能实现文件传输和发送邮件啦
  2. manjaro文件不是一个有效的图表主题_重磅分享-揭开Excel动态交互式图表神秘面纱...
  3. kodi android设置中文,Kodi(原XBMC)
  4. html js 浏览器语言,js 判断浏览器语言的方法
  5. 智慧政务解决方案(28页)pdf_智慧政务解决方案在政务服务大厅中的应用
  6. python_装饰器
  7. 极光IM初始化SDK出错
  8. Python-条件控制及循环
  9. 02.生成、打包、部署和管理应用程序及类型
  10. [ERR0134] Requested Service is not available【转载】