集合类分为array、dictionary、set。每个集合都有一个isEmpty属性来判断这个集合是否为空
创建array的四种方法
var array1 = ["a","b","c"] //包含 a b c 三个字符串
var array2 = Array() //空array,这里一定要指明元素类型
var array3 = [String]() //空array
var array4 = Array(repeating:2.4, count:3) //包含3个double变量,值都为1.3
var array5 = [Double](repeating:2.4, count:3) //包含3个double变量,值都为1.3
获取array的某个元素,直接用下标就行
var value = array1[2]
清空数组
//将array1变为空,下面两个方法是等价的
array1.removeAll()
array1 = [];
想要清空某个元素,用remove(at:) 方法
如果想要清空某个范围的元素,API提供了
array1.removeSubrange(1..endIndex)// 这里会移除从1开始,但是不包括end的元素,但是endIndex是指向最后一个元素的后一个元素的,所以会从index为1的元素开始,删除后面全部。
array4[1...2] = [] //这里将范围1-2的元素都清空了,注意一点,如果数组越界的话,会产生运行时错误
向array添加元素
//使用append()方法
array1.append("A") //向array1的末尾添加一个 A,现在只有一个 A 元素
//使用运算符号
array3 += ["d","e"] //array3从空数组变为包含 d e 两个字符串
var array5 = array1 + array3 + ["last"] //array5包含 A d e last, 4个元素
//使用insert方法
array5.insert("first", at: 0) //array5包含 first A d e last, 5个元素
改变array元素
array5[0] = "newBe"
array5[1...3] = ["1","2","3"]
遍历数组
for item in array5 {
print(item)
}
for (index,item) in array5.enumerated() {
print(index,item)
}
set里面的元素都必须实现hashable。因为区分set里面的元素的根本就是判断两个元素的hash值是否相等。swift基本类型都实现了hashable
var emptySet = Set<Character>() //建立一个空set,必须指明内容的类型
var nameSet : Set<String> = ["Tom","Lucy","Aaron"] //使用初始数据建立set
Set的添加只有刚刚上面那个 insert 方法,就不介绍了。
移除Set
removeAll(),这个方法还可以传一个boolean参数,表示是否保持空间,传ture的话表示保持。
移除一个元素有两种办法
var index = nameSet.index(of:"Tom")
nameSet.remove(at:index!) //因为indexOf返回的是可选类型,所以这里要解包
nameSet.remove("Tom") //这种和上面的是等价的。
遍历Set
for name in nameSet.sorted() { //这里的sorted()可以不用,这里用来排序
print(name)
}
Set和Array都有一个contains方法来判断是否包含某个元素。
Set操作
包括了求交集,并集,“减集”,“异或集”,直接上官方代码
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
oddDigits.union(evenDigits).sort()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sort()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sort()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sort()
// [1, 2, 9]
Set关系
isSubset(of:) 判断一个set是否为另外一个set的子set
isSuperset(of:) 判断一个set是否为另外一个set的父set
isStrictSubset(of:) 和 isStrictSuperset(of:) 意思和上面的一样,只是这两个方法不能存在相等的情况。
isDisjoint(with:) 判断两个set是否没有共同元素,没有的话返回true
创建Dictionary的三种方法
var dict1 : [String:Int] = ["a":1,"b":2,"c":3]
var dict = ["a":1,"b":2,"c":3, 3:"d"] as [AnyHashable : Any] //注意这个没声明类型的,因为key和value里面都有不同的类型,所以需要将二者都强转为AnyHashable,但是如果key(value)类型只有一种的话,那么就会转为那种类型。
var dict2 = [Int:String]()
var dict3 = Dictionary<String,Int>()
添加/修改/删除dictionary
dictionary也提供了removeAll,removeAtIndex之类的方法。使用和Set是一样的,就不写了。下面是dictionary特有的
dict[5] = "f" //添加一个键值对 5: "f"
dict[5] = 5 //修改key为5的值为5
dict[5] = nil //删除key为5的键值对
dict[6] = nil //对不存在的键值对赋nil不会报错
dict2 = [:] //清空所有
现在新增了一个更改和删除的方法,可以获得更新和删除前的旧值(可选类型)。如果这个值以前不存在,那么返回nil
let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB")
let removedValue = airports.removeValue(forKey: "DUB")
遍历dictionary
同样可以对key和value进行遍历,只需把in 后面改为 dict.keys 或 dict.values 就行了。
for (key,name) in dict {
print(key,name,separator:":")
}
var keys = dict1.keys.sort();
for key in keys {
print(key,dict[key]!)
}