Swift4学习笔记4——集合类型

集合类分为array、dictionary、set。每个集合都有一个isEmpty属性来判断这个集合是否为空

Array

创建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

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

创建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]!)
}

你可能感兴趣的:(swift4)