Swift中的集合
- 集合的定义和特性:Swift中的集合是存储唯一元素的无序集合,适用于需要唯一性的场景,如存储不重复的学生ID。
- 操作集合的方法:集合提供多种方法,包括添加(
insert
)、移除(remove
)元素,以及各种集合操作(如并集、交集、差集)。 - 集合的遍历和比较:集合可以通过
for
循环遍历,使用==
运算符比较两个集合是否相等,并支持判断子集关系。
集合是一种存储唯一数据的集合。也就是说,集合中的元素不会重复。例如,
假设我们想存储 学生ID 的信息。由于 学生ID 不能重复,我们可以使用集合。
在 Swift 中创建集合
以下是我们在 Swift 中创建集合的方法。
// 创建一个整数类型的集合
var studentID : Set = [112, 114, 116, 118, 115]
print("学生ID: \(studentID)")
输出
学生ID: [112, 114, 115, 118, 116]
在上面的示例中,请注意这条语句,
var studentID : Set = [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("初始集合: \(numbers)")
// 使用 insert 方法
numbers.insert(32)
print("更新后的集合: \(numbers)")
输出
初始集合: [54, 21, 34, 12]
更新后的集合: [54, 21, 34, 12, 32]
在上述示例中,我们创建了一个名为 employeeID
的集合。注意这行代码,
numbers.insert(32)
这里,insert()
将 32 添加到我们的集合中。
从集合中移除元素
我们使用 remove()
方法从集合中移除指定的元素。例如,
var languages: Set = ["Swift", "Java", "Python"]
print("初始集合: \(languages)")
// 从集合中移除 Java
let removedValue = languages.remove("Java")
print("使用 remove() 后的集合: \(languages)")
输出
初始集合: ["Python", "Java", "Swift"]
使用 remove() 后的集合: ["Python", "Swift"]
类似地,我们也可以使用
removeFirst()
- 移除集合的第一个元素removeAll()
- 移除集合的所有元素
其他集合方法
方法 | 描述 |
---|---|
sorted() | 对集合元素进行排 序 |
forEach() | 对每个元素执行指定的操作 |
contains() | 在集合中搜索指定元素 |
randomElement() | 从集合中返回一个随机元素 |
firstIndex() | 返回给定元素的索引 |
遍历集合
我们可以使用 for 循环 来遍历集合中的元素。例如,
let fruits: Set = ["Apple", "Peach", "Mango"]
print("水果:")
// for 循环访问每个水果
for fruit in fruits {
print(fruit)
}
输出
水果:
桃子
芒果
苹果
计算集合元素数量
我们可以使用 count
属性来计算集合中的元素数量。例如,
let evenNumbers = [2,4,6,8]
print("集合: \(evenNumbers)")
// 查找元素数量
print("总元素数量: \(evenNumbers.count)")
输出
集合: [2, 6, 8, 4]
总元素数量: 4
Swift 集合操作
Swift 集合提供了多种内置方法来执行数学集合操作,如并集、交集、差集和对称差。
1. 两个集合的并集
两个集合 A 和 B 的并集包括集合 A 和 B 的所有元素。
我们使用 union()
方法来执行集合的并集操作。例如,
// 第一个集合
let setA: Set = [1, 3, 5]
print("集合 A: ", setA)
// 第二个集合
let setB: Set = [0, 2, 4]
print("集合 B: ", setB)
// 执行并集操作
print("并集: ", setA.union(setB))
输出
集合 A: [1, 5, 3]
集合 B: [0, 2, 4]
并集: [0, 5, 2, 4, 1, 3]
注意:setA.union(setB)
等价于集合操作 A ⋃ B
。
2. 两个集合的交集
两个集合 A 和 B 的交集包括集合 A 和 B 的共同元素。
我们使用 intersection()
方法来执行两个集合之间的交集。例如,
// 第一个集合
let setA: Set = [1, 3, 5]
print("集合 A: ", setA)
// 第二个集合
let setB: Set = [1, 2, 3]
print("集合 B: ", setB)
// 执行交集操作
print("交集: ", setA.intersection(setB))
输出
集合 A: [5, 3, 1]
集合 B: [1, 2, 3]
交集: [3, 1]
注意:setA.intersection(setB)
等价于集合操作 A ⋂ B
。
3. 两个集合之间的差集
两个集合 A 和 B 之间的差集包括集合 A 中不在集合 B 中的元素。
我们使用 subtracting()
方法来执行两个集合之间的差集。例如,
// 第一个集合
let setA: Set = [2, 3, 5]
print("集合 A: ", setA)
// 第二个集合
let setB: Set = [1, 2, 6]
print("集合 B: ", setB)
// 执行差集操作
print("差集: ", setA.subtracting(setB))
输出
集合 A: [3, 5, 2]
集合 B: [1, 6, 2]
差集: [3, 5]
注意:setA.substracting(setB)
等价于集合操作 A - B
。
4. 两个集合的对称差
两个集合 A 和 B 之间的对称差包括 A 和 B 的所有元素,但不包括共有元素。
我们使用 symmetricDifference()
方法来执行两个集合之间的对称差。例如,
// 第一个集合
let setA: Set = [2, 3, 5]
print("集合 A: ", setA)
// 第二个集合
let setB: Set = [1, 2, 6]
print("集合 B: ", setB)
// 执行对称差操作
print("对称差: ", setA.symmetricDifference(setB))
输出
集合 A: [5, 2, 3]
集合 B: [2, 6, 1]
对称差: [1, 6, 3, 5]
5. 检查一个集合是否是另一个集合的子集
如果集合 B 的所有元素都存在于集合 A 中,那么称集合 B 是集合 A 的子集。
我们使用 isSubset()
方法来检查一个集合是否是另一个集合的子集。例如,
// 第一个集合
let setA: Set = [1, 2, 3, 5, 4]
print("集合 A: ", setA)
// 第二个集合
let setB: Set = [1, 2]
print("集合 B: ", setB)
// 检查 setB 是否是 setA 的子集
print("子集: ", setB.isSubset(of: setA))
输出
集合 A: [3, 1, 2, 5]
集合 B: [1, 2]
子集: true
检查两个集合是否相等
我们可以使用 ==
运算符来检查两个集合是否相等。例如,
let setA: Set = [1, 3, 5]
let setB: Set = [3, 5, 1]
if setA == setB {
print("集合 A 和集合 B 相等")
}
else {
print("集合 A 和集合 B 不同")
}
输出
集合 A 和集合 B 相等
在上述示例中,setA
和 setB
有相同的元素,所以条件
if setA == setB
评估为 true
。因此,在 if
语句中的 print("集合 A 和集合 B 相同")
被执行。
创建一个空集合
在 Swift 中,我们也可以创建一个空集合。例如,
var emptySet = Set<Int>()
print("集合:", emptySet)
输出
集合: [ ]
需要注意的是,在创建空集合时,我们必须在 <>
后面指定数据类型,并跟一个初始化语法 ()
。
这里的 <Int>()
指定空集合只能存储整数数据元素。