0%

记一下 Swift 中数组、字典、集合的基本操作

Swift 语法还在变动中,好不容易记住的等版本一升级又变了。这次正好记一下最新的数组、字典、集合的基本操作,用的时候可以查询。

数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var numbers: Array<Int> = [3, 5, 7, 9, 1, 3, 12]

numbers.count // 元素数量
numbers.isEmpty // 数组是否为空
numbers[2] // 数组下标元素
numbers.first // 首个元素(可选型)
numbers.last // 最后一个元素(可选型)
numbers.max() // 数组最大元素(可选型)
numbers.contains(3) // 是否包含某个元素
numbers.contains { (num) -> Bool in
num > 10
} // 是否包含大于 10 的数
numbers.contains { $0 > 10} // 上条代码的简写
numbers.index(of: 7) // 某个元素首次出现的下标(可选型)

numbers.append(2) // 末尾添加一个元素
numbers.append(contentsOf: [2, 5, 7]) // 末尾增添一个数组
numbers += [2, 5, 7] // 上句代码的简写
numbers.insert(10, at: 3) // 在某个位置插入元素

numbers.removeFirst() // 删除第一个元素
numbers.removeLast() // 删除最后一个元素
numbers.remove(at: 4) // 删除指定位置元素
numbers.removeAll() // 删除所有元素

numbers[4] = 11 // 修改指定位置元素
numbers[1...3] = [6, 9, 12, 55, 7] // 将指定范围元素替换

// 数组遍历
for number in numbers {
number
}

字典

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var dict: Dictionary<String, String> = ["swift": "燕子", "python": "蟒蛇"]

dict.count // 字典元素数量
dict.isEmpty // 字典是否为空
dict["swift"] = "雨燕" // 增、改 返回新值
dict.updateValue("大蟒", forKey: "python") // 改 返回旧值
dict["swift"] // 查 (可选型)
dict.removeValue(forKey: "java") //删
dict["java"] = nil // 删

Array(dict.keys) // 将字典所有键放进一个数组中
Array(dict.values) // 将字典的所有值放进一个数组

// 遍历字典的键值对
for (key, value) in dict {
key
value
}

集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 集合必须显式声明类型,并且没有快速创建的方法
var setA: Set<String> = ["A", "B"]
var setB: Set<String> = ["C", "D", "E"]
var setC: Set<String> = []

// 声明空集合
var emptySet1: Set<Int> = []
var emptySet2 = Set<Double>()
var emptySet3: Set<Int> = Set()

// 将数组转成集合
var vowels = Set(["A", "E", "E", "I"])

vowels.first // 集合中随意一个元素

// 集合的添加
setC.insert("A")
setC.insert("D")
setC.insert("E")
setC.insert("E") // 重复添加是没效果的
// 删除
setC.remove("E")
//skillsOfC.removeAll() // 删除所有

// 集合的交并等运算,事实上数组也能用这些方法
setA.union(setB) // 交 但 skillsOfA 本身没有发生改变
skillsOfA.formUnion(skillsOfB) // 交 skillsOfA 改变
setA.intersection(setB) // 并, 本身不改变
skillsOfA.formIntersection(skillsOfB) // 并,本身改变
setA.subtracting(setC) // A有C没有,本身不改变
skillsOfA.subtract(skillsOfC) // A有C没有,本身改变
setA.symmetricDifference(setC) // 亦或,即A和C 中除去共有剩下的部分, 本身不改变
setA.formSymmetricDifference(setC) // 亦或,本身改变
setC.isSubset(of: setA) // 判断子集
setC.isStrictSubset(of: setA) // 判断真子集
setA.isSuperset(of: setC) // 判断超集
setA.isStrictSuperset(of: setC) // 判断真超集
setA.isDisjoint(with: setC) // 判断相离,就是看是否有共同元素