Swift 集合(Set)

在本教程中,我们将通过示例学习 Swift 中的集合(Set)及其各种操作。

集合是唯一数据的集合。也就是说,集合的元素不能重复。例如,

假设我们想要存储关于学生 ID 的信息。由于学生 ID 不能重复,我们可以使用一个集合。


在 Swift 中创建集合

以下是我们如何在 Swift 中创建集合。

  1. // create a set of integer type
  2. var studentID : Set = [112, 114, 116, 118, 115]
  3. print("Student ID: \(studentID)")

结果如下:

  1. Student ID: [112, 114, 115, 118, 116]

这里,Set 关键字指定 studentID 是一个集合。由于集合中的所有元素都是整数,studentID 是一个 Int 类型的集合。

但是,我们也可以将集合的类型指定为:

  1. var studentID : Set<Int> = [112, 114, 115, 116, 118]
注意:当您运行此代码时,可能会以不同的顺序获得输出。这是因为集合没有特定的顺序。

向集合中添加元素

我们使用 insert() 方法将指定元素添加到集合中。例如,

  1. var numbers: Set = [21, 34, 54, 12]
  2. print("Initial Set: \(numbers)")
  3. // using insert method
  4. numbers.insert(32)
  5. print("Updated Set: \(numbers)")

结果为:

  1. Initial Set: [54, 21, 34, 12]
  2. Updated Set: [54, 21, 34, 12, 32]

在上面的实例中,我们创建了一个名为 employeeID 的集合。注意这一句,

  1. numbers.insert(32)

这里,insert()32 添加到我们的集合中。


从集合中移除元素

我们使用 remove() 方法从集合中移除指定元素。例如,

  1. var languages: Set = ["Swift", "Java", "Python"]
  2. print("Initial Set: \(languages)")
  3. // remove Java from a set
  4. let removedValue = languages.remove("Java")
  5. print("Set after remove(): \(languages)")

结果如下:

  1. Initial Set: ["Python", "Java", "Swift"]
  2. Set after remove(): ["Python", "Swift"]

类似地,我们还可以使用

  • removeFirst() - 删除集合的第一个元素

  • removeAll() - 删除集合中的所有元素


其他集合方法

方法描述
sorted()对集合元素排序
forEach()对每个元素执行指定的操作
contains()查询集合中的指定元素
randomElement()从集合中随机返回一个元素
firstIndex()返回给定元素的索引

在集合上迭代

我们可以使用 for 循环 迭代集合的元素。例如,

  1. let fruits: Set = ["Apple", "Peach", "Mango"]
  2. print("Fruits:")
  3. // for loop to access each fruits
  4. for fruit in fruits {
  5. print(fruit)
  6. }

结果如下:

  1. Fruits:
  2. Peach
  3. Mango
  4. Apple

查找集合元素数

我们可以使用 count 属性来查找集合中存在的元素数。例如,

  1. let evenNumbers = [2,4,6,8]
  2. print("Set: \(evenNumbers)")
  3. // find number of elements
  4. print("Total Elements: \(evenNumbers.count)")

结果如下:

  1. Set: [2, 6, 8, 4]
  2. Total Elements: 4

Swift 集合运算

Swift 集合提供了不同的内置方法来执行数学集合操作,如并集、交集、减法和对称差分。

1.两个集合的并集

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

我们使用 union() 方法执行集合并集操作。例如,

  1. // first set
  2. let setA: Set = [1, 3, 5]
  3. print("Set A: ", setA)
  4. // second set
  5. let setB: Set = [0, 2, 4]
  6. print("Set B: ", setB)
  7. // perform union operation
  8. print("Union: ", setA.union(setB))

结果为:

  1. Set A: [1, 5, 3]
  2. Set B: [0, 2, 4]
  3. Union: [0, 5, 2, 4, 1, 3]
注意setA.union(setB) 相当于 A ⋃ B 集合运算。

2.两个集合的交集

两个集合 AB 的交集包括集合 A 和集合 B 之间的公共元素。

我们使用 intersection() 方法来执行两个集合之间的交集。例如:

  1. // first set
  2. let setA: Set = [1, 3, 5]
  3. print("Set A: ", setA)
  4. // second set
  5. let setB: Set = [1, 2, 3]
  6. print("Set B: ", setB)
  7. // perform intersection operation
  8. print("Intersection: ", setA.intersection(setB))

结果为:

  1. Set A: [5, 3, 1]
  2. Set B: [1, 2, 3]
  3. Intersection: [3, 1]
注意setA.intersection(setB) 相当于 A ⋂ B 集合运算。

3.两个集合之间的差异

两个集合 AB 之间的差异包括集合 B 上不存在的集合 A 的元素。

我们使用 subtracting() 方法来执行两个集合之间的差异。例如:

  1. // first set
  2. let setA: Set = [2, 3, 5]
  3. print("Set A: ", setA)
  4. // second set
  5. let setB: Set = [1, 2, 6]
  6. print("Set B: ", setB)
  7. // perform subtraction operation
  8. print("Subtraction: ", setA.subtracting(setB))

结果为:

  1. Set A: [3, 5, 2]
  2. Set B: [1, 6, 2]
  3. Subtraction: [3, 5]
注意setA.substracting(setB) 相当于 A - B 集合运算。

4.两个集合之间的对称差

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

我们使用 symmetricDifference() 方法在两个集合之间执行对称差分。例如:

  1. // first set
  2. let setA: Set = [2, 3, 5]
  3. print("Set A: ", setA)
  4. // second set
  5. let setB: Set = [1, 2, 6]
  6. print("Set B: ", setB)
  7. // perform symmetric difference operation
  8. print("Symmetric Difference: ", setA.symmetricDifference(setB))

结果为:

  1. Set A: [5, 2, 3]
  2. Set B: [2, 6, 1]
  3. Symmetric Difference: [1, 6, 3, 5]

5.检查集合的子集

如果集合 B 的所有元素都存在于 A 中,则称集合 B 为集合 A 的子集。

我们使用 Subset() 方法检查一个集合是否是另一个集合的子集。例如:

  1. // first set
  2. let setA: Set = [1, 2, 3, 5, 4]
  3. print("Set A: ", setA)
  4. // second set
  5. let setB: Set = [1, 2]
  6. print("Set B: ", setB)
  7. // check if setB is subset of setA or not
  8. print("Subset: ", setB.isSubset(of: setA))

结果为:

  1. Set A: [3, 1, 2, 5]
  2. Set B: [1, 2]
  3. Subset: true

检查两个集合是否相等

我们可以使用 == 运算符检查两个集合是否相等。例如:

  1. let setA: Set = [1, 3, 5]
  2. let setB: Set = [3, 5, 1]
  3. if setA == setB {
  4. print("Set A and Set B are equal")
  5. }
  6. else {
  7. print("Set A and Set B are different")
  8. }

结果为:

  1. Set A and Set B are equal

在上面的示例中,setAsetB 具有相同的元素,因此条件,

  1. if setA == setB

求值为 true。因此,执行 if 内的语句 print("Set A and Set B are same")


创建一个空集

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

  1. var emptySet = Set<Int>()
  2. print("Set:", emptySet)

结果为:

  1. Set: [ ]

重要的是要注意,在创建空集时,我们必须在 <> 中指定数据类型,然后使用初始化语法 ()

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