跳到主要内容

Swift中的集合

提示
  1. 集合的定义和特性:Swift中的集合是存储唯一元素的无序集合,适用于需要唯一性的场景,如存储不重复的学生ID。
  2. 操作集合的方法:集合提供多种方法,包括添加(insert)、移除(remove)元素,以及各种集合操作(如并集、交集、差集)。
  3. 集合的遍历和比较:集合可以通过for循环遍历,使用==运算符比较两个集合是否相等,并支持判断子集关系。

集合是一种存储唯一数据的集合。也就是说,集合中的元素不会重复。例如,

假设我们想存储 学生ID 的信息。由于 学生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. 两个集合的并集

两个集合 AB 的并集包括集合 AB 的所有元素。

两个集合 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. 两个集合的交集

两个集合 AB 的交集包括集合 AB 的共同元素。

两个集合 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. 两个集合之间的差集

两个集合 AB 之间的差集包括集合 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. 两个集合的对称差

两个集合 AB 之间的对称差包括 AB 的所有元素,但不包括共有元素。

两个集合 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 的子集。

集合 A 是集合 B 的子集

我们使用 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 相等

在上述示例中,setAsetB 有相同的元素,所以条件

if setA == setB

评估为 true。因此,在 if 语句中的 print("集合 A 和集合 B 相同") 被执行。

创建一个空集合

在 Swift 中,我们也可以创建一个空集合。例如,

var emptySet = Set<Int>()
print("集合:", emptySet)

输出

集合: [ ]

需要注意的是,在创建空集合时,我们必须在 <> 后面指定数据类型,并跟一个初始化语法 ()

这里的 <Int>() 指定空集合只能存储整数数据元素。