Swift Set

时间:2020-02-23 14:44:04  来源:igfitidea点击:

在本教程中,我们将讨论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。