Tags: Swift 学习笔记
发布时间:2015-07-06
修改时间:2015-07-06
作者:Erwin
博客地址:技术杂货铺
欢迎转载,转载请注明出处。
Swift学习笔记系列——(3)集合类型
三种集合类型
Array、Set和Dictionary
共同点
键(如果有的化)和值的类型是确定的
基于泛型
不同点
Array有序,Set无序,Dictionary无序
Array不排斥相同值,Set排斥相同值,Dictionary同一键的值唯一
Array
声明
正规写法:Array<类型>
简化写法:[类型]
创建空数组
[类型]()
用默认值创建数组
[类型](count:长度,repeatedValue:默认初始值)
用两个数组的内容创建新数组
使用“+”操作符
用数组字面值创建数组
[值1,值2……]
因为有类型推测,用字面值赋值的数组可以不声明类型
访问和修改数组
count属性
isEmpty属性
append(_:)方法
在数组末尾追加单个内容
+=
在数组末尾追加另外一个数组
索引
索引从0开始
用“数组名[索引]”访问和修改数组中的值
用“数组名[索引开始…索引结束]”访问和修改其中若干值
insert(_:atIndex)
在指定位置插入一个内容
removeAtIndex(_:)
removeLast()
删除最后一个内容
删除造成的空隙会被后面内容填充,数组无空位
遍历数组
for-in语句
for item in shoppingList { // doSomething }
enumerate()方法
for (index,value) in shoppingList.enumerate() { print("Item \(index+1):\(value)") }
Set
无序存储同类型的不同内容
Set存储的类型的哈希值
Set中存储的值的类型需要遵循hashable协议,有哈希值
因为hashable协议继承了Equatable协议,所以还得实现==操作符
基本类型都有哈希值
没有联合值的枚举也有哈希值
Set声明语法
Set<T>
创建空Set
Set<T>()
用数组字面值初始化Set
单独一个字面值的情况不能省略类型声明
多个字面值而且是相同类型的情况可以省略类型声明
访问和修改Set
count属性
得到Set长度
isEmpty属性
得到Set是否为空
insert(_:)方法
插入一个内容
remove(_:)方法
移除一个内容
removeAll()方法
移除所有内容
contains(_:)方法
检查是否包含特定内容
遍历Set
for-in语句
sort()方法对Set进行排序
操作Set
intersect(_:)方法
取两个Set交集
exclusiveOr(_:)方法
取两个Set交集之外的合集
union(_:)方法
取两个Set合集
subtract(_:)方法
取Set A中不包括在Set B中的部分
Set的关系和相等
==
两个Set包含相同的东西
isSubsetOf(_:)方法
判断一个Set是不是完全被另一个Set包含
isSupersetOf(_:)方法
判断一个Set是不是完全包含另外一个Set
isStrictSubsetOf(_:)方法
判断一个Set是不是完全被另一个Set包含,相等除外
isStrictSupersetOf(_:)方法
判断一个Set是不是完全包含另外一个Set,相等除外
isDisjointWith(_:)方法
判断两个Set是否没有任何交集
Dictionary
无序
键的类型要一致
值的类型要一致
键值相互关联
键唯一
要求key遵循Hashable协议
声明
简短写法
[Key: Value]
全写
Dictionary<Key,Value>
创建空字典
var namesOfIntegers = [Int: String]() // namesOfIntegers is an empty [Int: String] dictionary namesOfIntegers =[:]
用字典字面值创建字典
[key 1: value 1,key 2: value 2,key 3: value 3]
访问和修改一个字典
count属性
isEmpty属性
下标修改和添加
dictornary[keyname]=value
用下标删除
dictornary[keyname]=nil
updateValue(_:forKey:)方法
等价于下标操作,返回一个可选值。
removeValueForKey(_:)方法
等价于下标赋值nil操作,返回一个可选值。
遍历字典
字典的每一项是一个元组
for (airportCode,airportName) in airports { print("\(airportCode): \(airportName)") }
利用keys和values属性
for airportCode in airports.keys { print("Airport code: \(airportCode)") } // Airport code: YYZ // Airport code: LHR for airportName in airports.values { print("Airport name: \(airportName)") } // Airport name: Toronto Pearson // Airport name: London Heathrow