顾名思义。当我们仰望的时候,我们将基于索引查找我们需要找到的资源。在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. 基本介绍LINUX远程PC软件:PUTTY、SecureCRT、X-Manager

    ***********************************************声明************************************************ 原创 ...

  2. 分布式搜索elasticsearch 文献检索索引 入门

    1.首先,例如,下面的数据被提交给ES该指数 {"number":32768,"singer":"杨坤","size": ...

  3. System.Threading.ThreadStateException

    异常:"System.Threading.ThreadStateException"在未处理的异常类型 System.Windows.Forms.dll 发生 其它信息: 在能够调 ...

  4. Visual Studio 2012中使用Zen Coding,写html的神器!

    点工具 -扩展和更新的联机库中 找到以下俩插件 安装后重新启动 新建一个html文件.将下行代码拷贝到页面里. div>(header>div)+(section>ul>li. ...

  5. JFinal 的源代码超具体的分析DB+ActiveRecord

    我记得有人告诉我."面试一下spring源代码.看ioc.aop源代码"那为什么要看这些开源框架的源代码呢,事实上非常多人都是"应急式"的去读.就像读一篇文章一 ...

  6. UVA11396-Claw Decomposition(二分图判定)

    题目链接 题意:能否将一张无向连通图分解成多个爪型.每一条边仅仅能属于一个爪型,每一个点的度数为3. 思路:当图分解成类干个爪型时,每条边仅仅属于一个爪子,所以每条边的两个点一定要处于2个不同的鸡爪中 ...

  7. java main方法背后的故事?(转)

    jvm java 看似一种语言,实则一个巨大的体系的王国,开发这么多年了,还是没有搞懂,我以为我懂了,可是过了一段时间又忘了,所以说还是没懂 1.main方法说起 编译完我们的java文件后,需要有个 ...

  8. 如何使用 iOS 7 的 AVSpeechSynthesizer 国家有声读物(4)

    控制:我们一定要学会控制 尤达大师(电影<星球大战>)有话:的关键在于控制.这本故事书是一个字一个字读出来,我愿意为它添加两个button,音调和语速,以便我们能够调整语音合成实时的时候. ...

  9. ACdreamoj1110(多重背包)

    意甲冠军:多个裸露的双肩背包.水的问题. 解决方法:然背包一样,仅仅只是加一个数组,记录着每一个物品用过的次数,多于存储量时就pass不更新. 另一种方法是将每一个物品用二进制压缩处理.第一个代码比較 ...

  10. Golang基于学习总结

    1.不支持继承 重载 ,比方C++Java的接口,接口的改动会影响整个实现改接口的类行为的改动,Go 设计者觉得这一特点也许根本没用. 2.必不论什么函数定义必须花括号跟在函数声明后面而不能换行 如 ...