Swift - Sets
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 的语法 —
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 的语法 —
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 的语法 —
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 的语法 —
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。
语法
以下是 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