Swift学习笔记四:数组和字典
Swift 提供两种集合类型来存储集合,数组和字典。
数组是一个同类型的序列化列表集合。字典是一个能够使用相似于键的唯一标识符来获取值的非序列化集合。也就是说数组是有序的。字典是无序的。
一. 数组
和Objective-c中的NSArray不一样。swift的数组不仅能够包括对象,也能够包括非对象
1. 初始化
1) 对于单一确定类型的数组初始化
let a:String[]
= ["1","n”]
String[]表示字符串数组类型
因为swift支持隐式表达,所以也能够直接不定义类型
let a = ["1","n"]
2) swift中数组能够存储多种不同类型的值。对于多种类型的数组能够这样显示初始化
let a:Array
= ["1",1,["1","2"]]
或者隐式初始化
let a = ["1",1,["1","2”]]
注意:同一个数组,最好仅仅存一种类型的值。这样方便存取,也不easy出bug。
定义数组的时候最好使用显示定义。显示定义时。假设书写错误,编译器能够直接报错
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
3)初始化空数组
var a =Int[]()
注意:未初始化的数组是不能使用的
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
4) Swift数组类型也提供初始化方法来创建确定长度和提供默认数值的数组。
你能够通过这个初始化方法添加一个新的数组。元素的数量成为count,合适的默认值为repeatedValue
var threeDoubles = Double[](count: 3, repeatedValue: 0.0) // threeDoubles 的类型为 Double[], 以及等于 [0.0, 0.0, 0.0]
5) 你也能够用array初始化数组
var a =Array(count:2,
repeatedValue:0)
但不能忽略count和repeatedValue
6) 你也能够使用+来创建数组
2. 读取和改动数组
1) 通过仅仅读属性count来读取数组的长度
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
2) 通过一个返回布尔类型的isEmpty属性检查数组的长度是否为0
ifa.isEmpty{}
3) 在数组末尾添加一个元素能够通过append方法
注意:let定义的数组属于常量数组,无法添加元素,仅仅有var定义的变量数组才干使用append添加元素
这时候a=[1,2,3,1]
4) 能够用(+=)操作符来把一个元素加入到数组末尾。
同理,仅仅有var定义的变量数组才干加入元素
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
注意:不能使用a=a+9
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
5)也能够用(+=)操作符来把一个数组加入到还有一个数组的末尾
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
6) 能够通过下标语法来取数组的值或者改动数组的值
注意:let定义的数组不能改变长度,却能够改变里面的值
也能够通过下标语法改变一系列的值
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
可是这样的方法对let类型的数组不适用
注意:你不能使用下标语法在数组中加入一个元素。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />这样写编译时不会出错。可是执行时会出bug
7) 在一个特定的索引位置插入一个值。能够使用insert(atIndex:)方法
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
8)你能够调用removeAtIndex方法移除特定的元素。
这种方法移除特定索引位置的元素。并返回这个被移除的元素(虽然你并不关心这个返回值)。
9) 能够使用removeLast移除数组最后一个元素
3. 遍历数组
能够使用for-in循环来遍历数组中的值
假设须要每个元素的整形的索引值,使用enumerate函数取代会更方便,enumerate函数对于每个元素都会返回一个包括元素的索引和值的元组(tuple)。
你能够在遍历部分分解元祖并储存在暂时变量或者常量中。
二、字典
swift中的字典和Objective-C中字典不一样,它的key和value能够是不论什么类型的值
1. 创建字典
let a = ["a":1,"b":2]
2. 读取和改动字典
1. 能够使用仅仅读的count属性来检查字典(Dictionary)包括多少个元素。
2. 能够使用下标语法给一个字典加入一个元素。
使用合适类型作为新的键,并分配给它一个合适的值
相同 let类型的字典不能加入值
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
3. 你也能够使用下表语法改变值
let类型的字典也不能改变值
4. 或者使用字典的updateValue(forKey:) 方法去设置或者更新一个特定键的值 . 和上面的下标样例一样, updateValue(forKey:)
方法假设键不存在则会设置它的值,假设键存在则会更新它的值, 和下标不一样是, updateValue(forKey:) 方法 假设更新时。会返回原来旧的值rThis enables you to 能够使用这个来推断是否发生了更新。
updateValue(forKey:) 方法返回一个和字典的值相同类型的可选值. 比如,假设字典的值的类型时String,则会返回String?
或者叫“可选String“,这个可选值包括一个假设值发生更新的旧值和假设值不存在的nil值。 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."
5.你也能够使用下标语法通过特定的键去读取一个值。假设字典中的键包括相应的值。这字典下标语法会返回这个键所相应的值。否则返回nil
6.移除一个元素
1)你能够使用下标语法把他的值分配为nil,来移除这个键值对。
2)也能够使用removeValueForKey方法,这种方法假设存在键所相应的值。则移除一个键值对,并返回被移除的值,否则返回nil。
3. 遍历字典
注意:Swift中的字典类型是非序列化集合,也就是无序的
最新文章
- C#生成二维码的方法
- 让dedecms autoindex,itemindex 从0到1开始的办法! 多重样式输出(借鉴)
- Linux新手扫盲
- php中array_filter的使用
- MVC3.0学习笔记之元模型元数据ModelMetaData以及模型元数据提供系统
- string 字符串的分隔处理与list的相互转换
- (一)CSS三种插入方式
- 如何为可扩展系统进行Java Socket编程
- Java排序8大算法实现
- jsp中pageEncoding、charset=UTF -8
- nyoj 素数环
- SourceTree 无法查看组织仓库
- 多态 鸭子类型 反射 内置方法(__str__,__del__) 异常处理
- webpack 打包问题
- FF中flash滚轮失效的解决方案
- piwik源码安装部署
- luogu P3234 [HNOI2014]抄卡组
- Zookeeper —— 一致性协议
- JQuery表格插件
- FPAG结构 组成 工作原理 开发流程(转)
热门文章
- cadence制作封装要素
- VM克隆之后启动eth0找不到eth0:unknown interface:no such device
- linux web.py spawn-fcgi web.py 配置
- 【JMeter性能测试】之学习资料总结(持续更新)
- EasyUI获取DataGrid中某一列的所有值
- 第一百五十六节,封装库--JavaScript,延迟加载
- 网络协议之ts---ts 流分析详解
- Codeforces Round #268 (Div. 2) (被屠记)
- 【BZOJ】2016: [Usaco2010]Chocolate Eating(二分)
- requirejs学习(一)