Swift 集合(Set)
在本教程中,我们将通过示例学习 Swift 中的集合(Set)及其各种操作。
集合是唯一数据的集合。也就是说,集合的元素不能重复。例如,
假设我们想要存储关于学生 ID 的信息。由于学生 ID 不能重复,我们可以使用一个集合。

在 Swift 中创建集合
以下是我们如何在 Swift 中创建集合。
// create a set of integer typevar studentID : Set = [112, 114, 116, 118, 115]print("Student ID: \(studentID)")
结果如下:
Student ID: [112, 114, 115, 118, 116]
这里,Set 关键字指定 studentID 是一个集合。由于集合中的所有元素都是整数,studentID 是一个 Int 类型的集合。
但是,我们也可以将集合的类型指定为:
var studentID : Set<Int> = [112, 114, 115, 116, 118]
向集合中添加元素
我们使用 insert() 方法将指定元素添加到集合中。例如,
var numbers: Set = [21, 34, 54, 12]print("Initial Set: \(numbers)")// using insert methodnumbers.insert(32)print("Updated Set: \(numbers)")
结果为:
Initial Set: [54, 21, 34, 12]Updated Set: [54, 21, 34, 12, 32]
在上面的实例中,我们创建了一个名为 employeeID 的集合。注意这一句,
numbers.insert(32)
这里,insert() 将 32 添加到我们的集合中。
从集合中移除元素
我们使用 remove() 方法从集合中移除指定元素。例如,
var languages: Set = ["Swift", "Java", "Python"]print("Initial Set: \(languages)")// remove Java from a setlet removedValue = languages.remove("Java")print("Set after remove(): \(languages)")
结果如下:
Initial Set: ["Python", "Java", "Swift"]Set after remove(): ["Python", "Swift"]
类似地,我们还可以使用
removeFirst()- 删除集合的第一个元素removeAll()- 删除集合中的所有元素
其他集合方法
| 方法 | 描述 |
|---|---|
| sorted() | 对集合元素排序 |
| forEach() | 对每个元素执行指定的操作 |
| contains() | 查询集合中的指定元素 |
| randomElement() | 从集合中随机返回一个元素 |
| firstIndex() | 返回给定元素的索引 |
在集合上迭代
我们可以使用 for 循环 迭代集合的元素。例如,
let fruits: Set = ["Apple", "Peach", "Mango"]print("Fruits:")// for loop to access each fruitsfor fruit in fruits {print(fruit)}
结果如下:
Fruits:PeachMangoApple
查找集合元素数
我们可以使用 count 属性来查找集合中存在的元素数。例如,
let evenNumbers = [2,4,6,8]print("Set: \(evenNumbers)")// find number of elementsprint("Total Elements: \(evenNumbers.count)")
结果如下:
Set: [2, 6, 8, 4]Total Elements: 4
Swift 集合运算
Swift 集合提供了不同的内置方法来执行数学集合操作,如并集、交集、减法和对称差分。
1.两个集合的并集
两个集合 A 和 B 的并集包括集合 A 和集合 B 的所有元素。

我们使用 union() 方法执行集合并集操作。例如,
// first setlet setA: Set = [1, 3, 5]print("Set A: ", setA)// second setlet setB: Set = [0, 2, 4]print("Set B: ", setB)// perform union operationprint("Union: ", setA.union(setB))
结果为:
Set A: [1, 5, 3]Set B: [0, 2, 4]Union: [0, 5, 2, 4, 1, 3]
setA.union(setB) 相当于 A ⋃ B 集合运算。2.两个集合的交集
两个集合 A 和 B 的交集包括集合 A 和集合 B 之间的公共元素。

我们使用 intersection() 方法来执行两个集合之间的交集。例如:
// first setlet setA: Set = [1, 3, 5]print("Set A: ", setA)// second setlet setB: Set = [1, 2, 3]print("Set B: ", setB)// perform intersection operationprint("Intersection: ", setA.intersection(setB))
结果为:
Set A: [5, 3, 1]Set B: [1, 2, 3]Intersection: [3, 1]
setA.intersection(setB) 相当于 A ⋂ B 集合运算。3.两个集合之间的差异
两个集合 A 和 B 之间的差异包括集合 B 上不存在的集合 A 的元素。

我们使用 subtracting() 方法来执行两个集合之间的差异。例如:
// first setlet setA: Set = [2, 3, 5]print("Set A: ", setA)// second setlet setB: Set = [1, 2, 6]print("Set B: ", setB)// perform subtraction operationprint("Subtraction: ", setA.subtracting(setB))
结果为:
Set A: [3, 5, 2]Set B: [1, 6, 2]Subtraction: [3, 5]
setA.substracting(setB) 相当于 A - B 集合运算。4.两个集合之间的对称差
两个集合 A 和 B 之间的对称差包括 A 和 B 的所有元素,而不包括公共元素。

我们使用 symmetricDifference() 方法在两个集合之间执行对称差分。例如:
// first setlet setA: Set = [2, 3, 5]print("Set A: ", setA)// second setlet setB: Set = [1, 2, 6]print("Set B: ", setB)// perform symmetric difference operationprint("Symmetric Difference: ", setA.symmetricDifference(setB))
结果为:
Set A: [5, 2, 3]Set B: [2, 6, 1]Symmetric Difference: [1, 6, 3, 5]
5.检查集合的子集
如果集合 B 的所有元素都存在于 A 中,则称集合 B 为集合 A 的子集。

我们使用 Subset() 方法检查一个集合是否是另一个集合的子集。例如:
// first setlet setA: Set = [1, 2, 3, 5, 4]print("Set A: ", setA)// second setlet setB: Set = [1, 2]print("Set B: ", setB)// check if setB is subset of setA or notprint("Subset: ", setB.isSubset(of: setA))
结果为:
Set A: [3, 1, 2, 5]Set B: [1, 2]Subset: true
检查两个集合是否相等
我们可以使用 == 运算符检查两个集合是否相等。例如:
let setA: Set = [1, 3, 5]let setB: Set = [3, 5, 1]if setA == setB {print("Set A and Set B are equal")}else {print("Set A and Set B are different")}
结果为:
Set A and Set B are equal
在上面的示例中,setA 和 setB 具有相同的元素,因此条件,
if setA == setB
求值为 true。因此,执行 if 内的语句 print("Set A and Set B are same")。
创建一个空集
在 Swift 中,我们还可以创建一个空集。例如:
var emptySet = Set<Int>()print("Set:", emptySet)
结果为:
Set: [ ]
重要的是要注意,在创建空集时,我们必须在 <> 中指定数据类型,然后使用初始化语法 ()。
这里,<Int>()指定空集只能存储整数数据元素。