Swift--Set 详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift--Set 详解相关的知识,希望对你有一定的参考价值。

参考技术A Set和Array的区别在于,Set是无序的,且Set中不能存在重复的元素(可以快速地验证Set中是否存在某一元素),此外Set中的元素需是符合Hashable协议的类型(字符串类型,数值类型,布尔类型,没有关联值的枚举类型,Set类型等都是符合Hashable的类型)。

利用数组字面值可直接创建Set

.contains(_:) 查看Set中是否含有某一特定元素

== 判断两个Set所包含的元素是否都相等

.isSubset(of:) 判断当前Set是否是参数中的Set的子集

.isStrictSubset(of:) 判断当前Set是否是参数中的Set的真子集

.isSuperset(of:) 判断当前Set是否含有参数中的Set或序列的所有元素

.isDisjoint(with:) 判断当前Set和参数中的Set是否含有相同的元素,若没有返回true,否则返回false

.union(_:) 返回两个Set的并集

.intersection(_:) 返回两个Set的交集

.symmetricDifference(_:)  返回两个Set中除了交集元素外的所有元素的集合

.subtracting(_:) 返回两个集合的差集

.formUnion(_:) | .formIntersection(_:) | formSymmetricDifference(_:) | .subtract(_:) 这四个函数的功能与上述四个函数的功能类似,差别在于是上方的函数都返回一个新的Set而不改变当前的Set的值,而下方的四个函数将所得到的结果赋予当前的Set。

Set的相关操作既可以用于Set之间,也可以用于Set和Array,Set和Sequence(序列)之间的操作

任何集合或序列中的immutating操作(不改变Set的值)都可用于Set

使用for-in遍历Set中的元素(遍历顺序不确定)

很多序列或集合中的操作的返回值类型是Array或无类型的集合而不是Set,需要显式地将运算结果转化成Set

使用类型转换操作符 as 可完成Set和NSSet之间的桥接

为了完成Set到NSSet的桥接,要求Set中的元素必须是class类型,符合@objc protocol的类型或者可以与Foundation中的类型相桥接的类型(String, Int,Float等)

Set到NSSet的桥接的时间复杂度和空间复杂度总是O(1),  但当Set中的元素不是class类型也不是符合@objc protocol的类型时,Set中的元素到OC中相关类型的桥接总是发生在第一次访问Set中的元素时,时间复杂度为O(n)。

NSSet到Set的桥接会调用NSSet的copy(with:)方法得到NSSet的不可修改的副本(时间复杂度不确定)并进行额外的Swift的统计工作(时间复杂度为O(1)),如果NSSet已经是不可修改的,那么copy(with:)方法返回同一个set(时间复杂度为O(1)),并且与桥接后得到的Set共享同一存储空间,采用copy-on-write的方法对该内存存储进行优化。

苹果官方文档

以上是关于Swift--Set 详解的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2:“Set<UITouch>”类型的值没有成员“anyObject”[重复]

将本机swift Set转换为数组[重复]

jvm内存详解-----详解------详解

搜索引擎系列六:Lucene搜索详解(Lucene搜索流程详解搜索核心API详解基本查询详解QueryParser详解)

linux 操作系统笔记基础命令

决策树原理与Sklearn参数详解