Swift Set
在本教程中,我们将讨论Swift Set的用例。
我们将介绍基本语法以及使用Swift集执行的一些重要操作。
1.Swift 集合(set)
Swift集是一种数据结构类型,以无序的方式保存相同类型的唯一值。
Set只能采用符合"哈希"协议的类型。
借助可哈希协议,集合基于" hashValue()"存储值。
因此,访问时间在组中是恒定的。hashValue是一个Integer,因此对于所有相等比较的对象来说都是相同的。
如果a == b
为真,则a.hashValue == b.hashValue
必须为真。
2. Swift Set与数组
设置存储唯一值。
数组可以重复存储。集是无序的。
打印一组的顺序与定义的顺序不同。
数组是有序的。根据哈希值设置存储值。
数组没有。由于使用散列值存储,因此集具有恒定的查找时间。
数组没有。
因此,集合比数组快。
3. Swift Set与字典
两者都是无序的,但是字典在两个不同的键中可以具有相同的值。
集始终具有唯一值。
让我们在XCode中启动Swift Playground并开始使用。
4.声明一个集合
我们可以通过以下方式声明集合:
var emptySet = Set<String>() emptySet = [] var filledSet : Set<Int> = [3,1,2] var typeInferredSet : Set = ["Red","Yellow","Green"] print(filledSet) print(emptySet) print(typeInferredSet)
要声明一个集合,我们必须使用关键字Set及其后的type。
Swift也可以从右侧设置的值推断类型。
上面的代码在控制台中输出以下内容。
5.从集合中插入和删除元素
我们可以按以下方式在一组中插入和删除元素:
let typeInferredSet : Set = ["Red","Yellow","Green"] //typeInferredSet.insert("Wednesday") //compilation error. Cannot insert in immutable Sets var emptySet = Set<String>() emptySet.insert("One") emptySet.insert("Two") emptySet.insert("One") //emptySet.insert(3) //compilation error var filledSet : Set<Int> = [3,1,2] var x = filledSet.remove(2) var y = filledSet.remove(0) let storeIndex = filledSet.index(of: 1) if let unwrapped = storeIndex { filledSet.remove(at: unwrapped) } filledSet.removeAll() //removes all the elements typeInferredSet.contains("Red") //returns true print("empty set: \(emptySet) x is: \(x ?? -1) y is: \(y ?? -1)") //Prints //empty set: ["One", "Two"] x is: 2 y is: -1
我们不能在带有
let
常量的Set中插入元素。可以在var/let变量中检索已删除的元素。
删除的元素作为可选参数返回。
如果被删除的元素不存在,则返回nil,并包装在可选元素中。
插入的重复元素将被忽略。
插入其他类型的元素会产生编译错误。
要使用元素的索引删除元素,我们需要将元素的Set <Type> .Index
传递到
remove(at:)中。 为此,我们需要使用
index(of:)检索索引,并使用
if let`语句通过可选的解包来传递值。x ??检查Optional是否为null,如果是,则在??的右边打印值。
否则,解包后会从可选参数中打印值。
6.在集合中查找元素
contains()
方法检查给定元素是否存在于集合中并返回一个布尔值。
let typeInferredSet : Set = ["Red","Yellow","Green"] typeInferredSet.contains("Red") //returns true
7.集合的大小
count属性返回集合中存在的元素数。
isEmpty检查集合是否为空,并返回一个布尔值。
var filledSet : Set<Int> = [3,1,2] filledSet.removeAll() filledSet.count //returns 0 fillSet.isEmpty //returns true typeInferredSet.count returns 3
8.从数组创建集合
我们可以使用以下语法从数组创建集合:
let intSet = Set([5,1,4,6]) let myArray = ["Monday","Tuesday"] let anotherSet = Set(myArray) let sequenceSet = Set<Int>(1...5) print(sequenceSet) //[5, 2, 3, 1, 4]
我们可以通过将数组传递到Set()中来创建一个数组。
我们也可以在Swift中使用Ranges创建一个集合。
9.遍历集合
我们可以使用for in循环以以下方式迭代集合。
var newSet : Set<String> = ["Yay","Nay","Meh"] for words in newSet{ print(words) } //prints //Nay //Meh //Yay
10.对集合进行排序
使用sorted()方法将集合保持有序排列。
var newSet : Set<Int> = [5,4,1,2,3] print(newSet) for words in newSet.sorted(){ print(words) }
上面的代码显示1到5。
默认情况下,它按升序对集合进行排序。
11.Swift Set操作
Swift set操作对于比较两个数据集很有用。
以下说明了常用的操作。
- 子集和超集
如果isStrictSubset()是传入的超集的子集,但不是精确的副本,则isStrictSubset()返回true。
如果集合是传入子集的超集而不是精确副本,则isStrictSuperset()返回true。
- 不相交和并集如果没有共同的元素,则两个集合不相交。
两个集合的并集将两个集合都连接在一起(忽略重复项)。
" union"需要将结果存储在一个新变量中。intersection
方法将从两个集合中获取公共元素setA.substract(setB)
将从A中删除在B中也是它们的元素,并返回一个新的集合。
除非我们将新集合仅重新分配为setA,否则不会更改setA。