Swift 集合(Set)
Swift的集合(Set)是一个简单的容器,可以按照无序列表的方式存储多个相同类型的值。它不能存储重复的值。这里的无序列表指的是你按照设置的方式无法获得项目的顺序。
Swift集合(Set)与Swift数组的区别
Swift集合(Set)与Swift数组的主要区别在于,Swift集合(Set)不允许重复存储相同的值,而Swift数组可以。Swift集合(Set)确保每个元素只出现一次,且元素的顺序不重要。
存储在Swift集合(Set)中的值必须是 可哈希的(hashable) 。可哈希的意思是,它必须提供一个hashValue属性。hashValue用于访问集合中的元素,因为集合是无序的。
所有Swift的基本数据类型(例如String、Int、Double和Bool)默认都是可哈希的,可以用作集合的值类型。我们也可以在Swift中创建自己的可哈希类型,以便存储在集合中。
如何在Swift中声明集合(Set)
我们可以声明一个集合(Set)来存储一些值。
示例
let someIntSet:Set = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(someIntSet)
输出:
[2, 4, 9, 5, 6, 7, 3, 1, 8]
声明一个包含重复值的集合
let someIntSet:Set = [1, 2, 3, 4, 8, 8, 8, 5, 5]
print(someIntSet)
输出:
[2, 4, 5, 3, 1, 8]
在上面的程序中,我们输入了重复的值5和8。但是在输出中,我们可以看到重复的值已经被移除。
在Swift中访问集合元素
我们不能像访问数组元素那样以相同的方式访问集合元素,因为集合元素是无序的。
因此,我们必须使用集合的方法和属性或使用for-in循环来访问集合元素。
在Swift中访问所有集合元素
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
for val in someIntSet {
print(val)
}
输出:
5
6
2
3
1
4
使用 remove() 方法访问选择性的集合元素
我们可以使用 remove() 方法访问集合中的选择性元素。
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
let someVal = someIntSet.remove(5)
print(someVal)
print(someIntSet)
输出结果:
Optional(5)
[6, 2, 3, 1, 4]
在上述程序中,你可以看到remove()方法返回一个可选的字符串。建议按照以下方式进行可选处理。
使用remove()方法的可选处理
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
if let someVal = someIntSet.remove(5) {
print(someVal)
print(someIntSet)
} else {
print("cannot find element to remove")
}
输出:
5
[6, 2, 3, 1, 4]
在Swift中向集合中添加新元素
insert()方法用于在Swift中向集合中添加新元素。
添加单个元素
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
someIntSet.insert(7)
print(someIntSet)
输出:
[2, 4, 5, 6, 7, 3, 1]
在上面的示例中,我们向预定义集合中添加了一个新元素7。 要添加多个元素
示例
var someIntSet:Set = [1, 2, 3, 4, 5, 6]
someIntSet.insert(7)
someIntSet.insert(8)
someIntSet.insert(9)
someIntSet.insert(10)
print(someIntSet)
输出:
[10, 2, 4, 9, 5, 6, 7, 3, 1, 8]
在Swift中的集合操作
使用集合的另一个优点是它方便您执行集合操作,即并集、交集等。它与数学中的集合运算相同。
并集集合操作
两个集合 a 和 b 的并集是所有元素都组合在 a集合 和 b集合 中的集合。可以通过使用 a.union(b) 来访问它。
示例
let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 2, 4, 6, 8]
print(a.union(b))
输出:
[8, 2, 9, 4, 5, 7, 6, 3, 1, 0]
交集运算
两个集合 a 和 b 的交集是两个集合中都出现的元素组成的集合。可以通过使用 a.intersection(b) 来访问交集。
示例
let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 3, 4, 7, 8]
print(a.intersection(b))
输出:
[7, 3]
减法集合运算
两个集合的减法 a 和 b 是一个集合,该集合包含了所有属于a,但不属于b的元素。通过使用 a.subtracting(b) 可以访问。
示例
let a: Set = [1, 3, 5, 7, 9]
let b: Set = [0, 3, 4, 7, 8]
print(a.subtracting(b))
输出:
[5, 9, 1]
对称差集操作
两个集合 a 和 b 的对称差是一个包含在任一集合中但不在两个集合中都有的元素的集合。可以通过使用 a.symmetricDifference(b) 来访问。
示例
let a: Set = [1, 3, 5, 7, 9]
let b: Set = [1, 3, 7, 6, 8]
print(a.symmetricDifference(b))
输出:
[5, 6, 9, 8]
一些内置的函数和属性
索引 | 内置的集合函数 | 说明 |
---|---|---|
1. | isEmpty | isEmpty属性用于确定集合是否为空。如果集合为空,则返回true;否则返回false。 |
2. | first | first属性用于访问集合的第一个元素。 |
3. | insert | insert函数用于在集合中插入/添加元素。 |
4. | reversed | 该函数以反向顺序返回集合的元素。 |
5. | count | 该属性返回集合中的元素总数。 |
6. | removeFirst | 该函数从集合中移除并返回第一个值。 |