顾名思义。当我们仰望的时候,我们将基于索引查找我们需要找到的资源。在swift这同样适用,每个对象包括字典key和value。我们key为了找到当前这个key相应的value。与数组不同的是,字典项字典中没有详细的数据存储顺序。

和Swift中数组类似的。在Swift可变字典与不可变字典只通过let和var的定义来区分,而在OC中是通过NSDictionary和NSMutableDictionary来区分的。



Swift的字典定义为:(key: value),对于key和value是有限制的,key的唯一限制是可hash的。这样就能保证key是独一无二的,key的address就为:addr = hash(key) , value = hashTavle[addr]。先获取到key的地址,然后在哈希表中通过找到的key的地址来找到value的值。





字典的构造:

与数组类似的,字典也有非常多相似的语法:

var dict = ["key1":"value1" , "key2":"value2"]
println(dict)

输出为:[key1: value1, key2: value2]

我们知道swift具有类型推导的功能。我们不用定义key和value的类型,OS就能帮我们推导出key和value都是String类型。



我们也能够在申明一个字典的时候定义好字典中key和value的类型。

var dict2 : Dictionary<String, Int> = ["key1":1, "key2":2]
println(dict2)

输出为:[key1: 1, key2: 2]



当然我们也有一种省略一点的定义方式:

var dict3 : [String : Int] = ["key3": 3, "key4":4]
println(dict3)

输出为:[key4: 4, key3: 3]



我们也能够像数组一样使用构造语句来创建一个空字典:

var emptyDict = Dictionary<String, String>()

此时我们就创建了一个key和value都是字符串的空字典;

假设我们在创建字典的时候不知道要放什么类型的数据,我们也能够利用swift的类型推导功能在以后加入数据项的时候自己主动推导:

var emptyDict2 = [ : ]

数组的操作:

对数据的基础操作包括增删改查,对字典的操作相同如此:

对字典新增一项时。我们能够通过下标来加入新的数据项,比方对dict加入一项:

dict["key3"] = "value3"
println(dict)

此时dict中有三项了,输出为:[key1: value1, key3: value3, key2: value2]



改动字典中某一项的值时也能够用下标来进行操作:

dict["key1"] = "NOValue"
println(dict)

此时的输出就为:[key1: NOValue, key3: value3, key2: value2]

swift还提供了一个updateValue的方法来更新字典中的值,

dict.updateValue("123", forKey: "key4")
println(dict)

假设key存在则更新key所相应的value。假设key不存在则新增一条记录。



和数组一样。我们能够通过字典的仅仅读熟悉count来获取字典中的数据项的数量。



假设我们须要从一个字典中移除某个数据项,有这么2种方式:

1、用下标的方式来给某个键的相应值赋值为nil。这个该数据项就从字典中移除了:

dict["key4"] = nil
println(dict)

从输出中我们能够明显的看出key4所相应的数据项已经从字典中移除掉了;

2、用swift提供的函数:removeValueForKey:

dict.removeValueForKey("key1")
println(dict)

3、用removeAll方式来移除全部数据项。

字典遍历

还记得在数组的遍历中有2种方式,一种是for-in循环来遍历,一种是enumerate来遍历数据项和索引返回一个元祖,在字典的遍历中有以下几种方式:

1、for-in循环:

var dict = ["key1" : "value1" , "key2" : "value2" , "key3" : "value3"]

for key in dict{
println(key)
} for (key,value) in dict{
println("key is \(key) and value is \(value)")
} for (key, _) in dict {
println(key)
} for (_, value) in dict {
println(value)
}

输出为:

(key1, value1)
(key3, value3)
(key2, value2)
key is key1 and value is value1
key is key3 and value is value3
key is key2 and value is value2
key1
key3
key2
value1
value3
value2

我们看到这几种方式。第一种直接打印出键值对的值,另外一种我们的条件里面写了一个元组。分别打印key和value,第三种我们加了一个下划线,表示我们不关心第二项value的值,我们仅仅要第一项,第四种方式即我们仅仅关心value的值:

2、我们能够通过字典的keys熟悉来返回当前字典的全部的key,相同能够返回字典的全部value,

for keys in dict.keys {
println(keys)
} for values in dict.values {
println(values)
}

字典的keys和values返回的是一个集合,我们能够直接使用keys或者values属性来构造一个新数组:

let keysArray = Array(dict.keys)
println(keysArray)

数据字典条目随机取向,当我们通过字典时。key和value将再次安排,并且顺序不固定。

欢迎光临指导,共同学习。

【Swift初见】Swift词典的更多相关文章

  1. Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

    About Swift 关于Swift 官方文档的翻译,仅供参考,本人英语本就不好,边学边翻译,不喜勿喷. Swift is a new programming language for iOS, O ...

  2. Swift学习——Swift基础具体解释(一)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/34807025 注:由于基础部分在Swi ...

  3. 杂项-语言-Swift:Swift

    ylbtech-杂项-语言-Swift:Swift Swift,苹果于2014年WWDC(苹果开发者大会)发布的新开发语言,可与Objective-C*共同运行于Mac OS和iOS平台,用于搭建基于 ...

  4. Swift 初见

    http://numbbbbb.gitbooks.io/-the-swift-programming-language-/chapter1/02_a_swift_tour.html 本页内容包括: 简 ...

  5. 【Swift初见】SourceKitService Terminated

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/weasleyqi/article/details/36162085 心血来潮想试试最新的Xcode6 ...

  6. 从今天开始学习Swift -- Swift 初见 (转)

    原文地址:http://www.cocoachina.com/newbie/basic/2014/0604/8675.html   Swift系列文章由CocoaChina翻译小组翻译自苹果的官方文档 ...

  7. Swift初见

    Swift基本类型 Swift的类型是在C和OC的基础上发展而来的,Int是整型:Double和Float是浮点型:Bool是布尔型:String是字符串.类似OC,Swift也提出了三个集合类型:A ...

  8. 【Swift初见】Swift数组(二)

    在苹果的开发文档中对Array还提供了其它的操作算法: 1.Sort函数: 对数组进行排序.依据指定的排序规则,看以下的代码: var array = [2, 3, 4, 5] array.sort{ ...

  9. [Swift]LeetCode269. 外星人词典 $ Alien Dictionary

    There is a new alien language which uses the latin alphabet. However, the order among letters are un ...

随机推荐

  1. 采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址

    采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址. Truelicense 它是一个开源java license ...

  2. CSS设计指南之浮动与清除

    原文:CSS设计指南之浮动与清除 浮动意思就是把元素从常规文档流中拿出来,浮动元素脱离了常规文档流之后,原来紧跟在其后的元素就会在空间允许的情况下,向上提升到与浮动元素平起平坐. 一.浮动 CSS设计 ...

  3. oracle 转让日期格式字符串

    字符串传递日期格式 SELECT trunc(to_date(SALE_MON,'yyyy-mm'),'y'),trunc(to_date(SALE_MON,'yyyy-mm'),'mm')  FRO ...

  4. Android-管理Activity生命周期 -重新创建Activity

    按照正常的app行为,很少情况下activity会销毁,只有当用户点击了返回按钮或者activity通过调用finish()发出销毁信号.系统也有可能销毁activity如果它是停止状态并且很久没有使 ...

  5. Android SharedPreferences复杂的存储

    我们知道SharedPreferences简单类型的数据.比如.String.int等. 假设想用SharedPreferences存取更复杂的数据类型(类.图像等),就须要对这些数据进行编码. 我们 ...

  6. Android 中字体的处理

    //得到TextView控件对象 TextView textView = (TextView)findViewById(R.id.custom); //将字体文件保存在assets/fonts/文件夹 ...

  7. Nginx搭建反向代理服务器过程详解(转)

    一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...

  8. 【微信公众平台开发】百度周边搜索接口php封装

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcWl2YW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...

  9. JSP简单的练习-功能标签

    <!-- userfn.jsp --> <%@ page contentType="text/html;charset=gb2312" %> <%@ ...

  10. SQL Server 2005------函数

    原文:SQL Server 2005------函数 SQL Server 2005支持用户自定义函数和内置系统函数,根据返回值类型又分为标量函数和表值函数. 1.标量函数标量函数:返回单个数据值,返 ...