Swift Sets 怎么用?Swift 集合的创建、添加删除和常用操作详解?

文章导读
Previous Quiz Next Swift sets 用于存储相同类型的唯一值,但不像数组那样具有确定的顺序。它执行严格的类型检查,这意味着不允许在数组中插入错误类型的值,即使是无意为之。
📋 目录
  1. 在 Swift 中创建 Sets
  2. 在 Swift 中初始化 Sets
  3. 在 Swift 中遍历 Set
  4. Swift 中的集合运算
A A

Swift - Sets



Previous
Quiz
Next

Swift sets 用于存储相同类型的唯一值,但不像数组那样具有确定的顺序。它执行严格的类型检查,这意味着不允许在数组中插入错误类型的值,即使是无意为之。

如果将创建的 set 赋值给变量,那么它始终是可变的,这意味着可以通过添加、移除或更改其元素来修改它。但如果将 set 赋值给常量,那么该 set 是不可变的,这意味着无法向该 set 添加新元素。

如果尝试这样做,编译器将抛出错误。Set 使用哈希表来存储元素。所有基本的 Swift 值默认都是 hashable 类型,可以用作 set 值。

在 Swift 中创建 Sets

要创建特定类型的空 set,我们可以使用 Set() 初始化器。它明确接受数据类型。Set 可以存储任何数据类型的值,如 float、integer、string、character 和 double。

var someSet = Set<DataType>()

我们也可以使用数组字面量创建空 set。这是 set 的简写表示。

var someSet : Set<DataType> = [value]
Or
var someSet : Set = [value]

在 Swift 中初始化 Sets

我们可以使用以下方法初始化 set —

使用 insert() 方法

这是一个预定义函数,用于向 set 添加新元素。它一次添加一个元素。

语法

以下是 insert() 函数的语法 —

set.insert(x)

示例

import Foundation

// 初始化一个空的 String set
var mySet = Set<String>()

// 使用 insert() 函数向 set 中插入元素
mySet.insert("Swift")
mySet.insert("C++")
mySet.insert("C")
mySet.insert("Java")

// 显示 set
print(mySet)
输出

它将产生以下输出 —

["Java", "C", "Swift", "C++"]

使用数组字面量

我们也可以使用数组字面量初始化 set。这是初始化 set 的最简单方法。使用此方法,我们可以初始化包含多个值的 set。

语法

以下是数组字面量的语法 —

var someSet : Set = [value1, value2, value3]

示例

import Foundation

// 使用数组字面量初始化整数 set
var mySet1 : Set = [3, 55, 6, 22]

var mySet2 : Set<String> = ["Swift", "Java", "C", "C++"]

// 显示 set
print("Set 1:", mySet1)
print("Set 2:", mySet2)
输出

它将产生以下输出 —

Set 1: [3, 6, 55, 22]
Set 2: ["C++", "Swift", "C", "Java"]

在 Swift 中遍历 Set

遍历一个 set 可以让开发者访问并处理给定 set 中的单个元素。在 Swift 中,我们可以使用以下方法来遍历 set −

使用 for-in 循环

我们可以使用 for-in 循环来遍历给定 set 中的元素。这是依次访问和处理给定 set 中每个元素的最简单和最干净的方式。

示例

import Foundation

// 使用数组字面量初始化一个整数 set
var mySet1 : Set = [3, 55, 6, 22]

print("Elements of Set:")
// 遍历 set 中的每个元素
// 使用 for-in
for x in mySet1{
   print(x)
}
输出

它将产生以下输出 −

Elements of Set:
22
6
3
55

使用 enumerated() 函数结合 for-in 循环

如果我们想获取所有元素及其对应的索引值,则可以使用 enumerated() 函数结合 for-in 循环。

示例

import Foundation

// 初始化一个整数类型的 set
var mySet1 : Set = [3, 55, 6, 22]

print("Elements of Set:")

// 遍历 set 中的每个元素 
// 使用 for-in 循环结合 enumerated() 函数
for (index, element) in mySet1.enumerated(){
   print("\(element) is at index \(index)")
}
输出

它将产生以下输出 −

Elements of Set:
22 is at index 0
55 is at index 1
6 is at index 2
3 is at index 3

使用 forEach() 函数

Swift 提供了一个名为 forEach() 的预定义函数来遍历给定的 set。它有助于在不手动遍历的情况下对给定 set 的单个元素执行操作。

示例

import Foundation

// 初始化一个整数类型的 set
var mySet1 : Set = [3, 55, 6, 22]

print("Elements of Set:")

// 使用 forEach() 函数遍历 set
mySet1.forEach { num in
   print(num)
}
输出

它将产生以下输出 −

Elements of Set:
3
55
6
22

Swift 中的集合运算

集合运算用于组合、比较和操作集合。Set 支持五种类型的运算 —

  • Union
  • Intersection
  • Subtraction
  • Difference
  • Subset

现在让我们详细讨论它们。

Union

Union 用于将两个集合的元素组合成一个没有重复元素的集合。例如,我们有两个集合 set1 = [2, 4, 5] 和 set2 = [7, 8, 9],它们的 union 是 [2, 4, 5, 8, 9]。Swift 提供了一个预定义函数 union() 来对 set 执行 union 操作。该方法返回两个集合的 union。

Union

语法

以下是 union 的语法 —

Set1.union(set2)

示例

import Foundation

// 初始化一个整数类型的 set
var mySet1 : Set = [3, 55, 6, 22]
var mySet2 : Set = [4, 6, 21, 1]

// mySet1 和 mySet2 的 Union
var result = mySet1.union(mySet2)

print("Resultant set: ", result)
输出

它将产生以下输出 —

Resultant set:  [55, 1, 3, 21, 22, 4, 6]

Intersection

Intersection 用于找出两个给定集合中共有的元素。例如,我们有两个集合 set1 = [2, 4, 5, 1] 和 set2 = [7, 1, 9, 2],它们的 intersection 是 [2, 1]。Swift 提供了一个预定义函数 intersection() 来对给定集合执行 intersection 操作。该方法返回两个集合的 intersection。

Intersection

语法

以下是 intersection 的语法 —

Set1.intersection(set2)

示例

import Foundation

// 初始化一个整数类型的 set
var mySet1 : Set = [3, 55, 6, 1]
var mySet2 : Set = [4, 6, 21, 1]

// mySet1 和 mySet2 的 Intersection
var result = mySet1.intersection(mySet2)

print("Resultant set: ", result)
输出

它将产生以下输出 —

Resultant set:  [6, 1]

Subtraction

Subtraction 用于找出仅存在于 set 1 而不在 set 2 中的元素。例如,我们有两个集合 set1 = [2, 4, 5, 1] 和 set2 = [7, 1, 9, 3],它们的 subtraction 是 [2, 1, 4, 5]。Swift 提供了一个预定义函数 subtracting() 来对给定集合执行 subtraction 操作。该方法返回一个包含两个集合 subtraction 的新 set。

Subtraction

语法

以下是 subtraction 的语法 —

Set1.subtracting(set2)

示例

import Foundation

// 初始化一个整数类型的 set
var mySet1 : Set = [3, 55, 6, 1]
var mySet2 : Set = [4, 6, 21, 1]

// 从 mySet2 中减去 mySet1
var result = mySet2.subtracting(mySet1)

print("Resultant set: ", result)
输出

它将产生以下输出 —

Resultant set:  [4, 21]

Difference

Difference 用于找出两个集合中除了共有元素外的所有元素。例如,我们有两个集合 set1 = [2, 4, 5, 1] 和 set2 = [7, 1, 9, 3],两个集合的 difference 是 [4, 5, 7, 9, 3]。Swift 提供了一个预定义函数 symmetricDifference() 来对给定集合执行 difference 操作。该方法返回一个包含两个集合 symmetric difference 的新 set。

Difference

语法

以下是 difference 的语法 —

Set1.symmetricDifference(set2)

示例

import Foundation

// 初始化一个整数类型的 set
var mySet1 : Set = [3, 55, 6, 1]
var mySet2 : Set = [4, 6, 21, 1]

// 找出 mySet1 和 mySet2 之间的 difference
var result = mySet1.symmetricDifference(mySet2)

print("Resultant set: ", result)
输出

它将产生以下输出 —

Resultant set:  [4, 55, 3, 21]

Subset

如果 set 1 中的所有元素都存在于 set 2 中,则 set 1 是 set 2 的子集。例如,set1 = [2, 4, 5, 1] 是 set2 = [7, 9, 3, 2, 4, 5, 1] 的子集。Swift 提供了一个预定义方法 isSubset() 来检查给定 set 是否是另一个 set 的子集。如果给定 set 是另一个 set 的子集,它将返回 true。否则,返回 false。

Subset

语法

以下是 isSubset() 的语法 —

Set1.isSubset(set2)

示例

import Foundation

// 初始化一个整数类型的 set
var mySet1 : Set = [6, 1]
var mySet2 : Set = [4, 6, 21, 1]

// 检查 mySet1 是否是 mySet2 的子集
// 使用 isSubset() 函数
var result = mySet1.isSubset(of: mySet2)

print("Is mySet1 is the subset of mySet2?:", result)
输出

它将产生以下输出 —

Is mySet1 is the subset of mySet2?: true