博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift 集合 Set
阅读量:4296 次
发布时间:2019-05-27

本文共 1702 字,大约阅读时间需要 5 分钟。

Swift 集合 Set

Set 同 Array 的声明方式很类似,但他是一个无序集合,且内部元素不重复。

由于 Set 集合同 Array 的声明十分相似,所以要指出声明的是一个 Set 变量,否则默认就是 Array 变量。

var set1: Set
= []var set2 = Set
()var set3: Set = ["a","b"]

作为一个集合概念,Swift 的官方 API 中实现了许多数学操作,如一个集合是否是另一个集合的(真)子集,两个集合是否是互斥的,以及对两个集合进行合并、相交、相减等操作。

但是,这些操作并不是限于两个集合之间,集合和其他遵循 Sequence 协议的类型,如 Array 、Range 等,亦可。

并且,Set 变量还可以使用序列或集合中的一些方法。

let set1: Set = ["a","b"]let result = set1.reduce("", + )print(result)

输出:ab

同样的,使用 as 可以将 Set 转换为 NSSet ,只是元素的类型应是类,或者是遵循经 @objc 修饰的协议的类型。且 Set 和 NSSet 转换时,共享同一片内存中的数据,直到发生修改。

常用方法

下面两个方法是对两个集合做差,但是前者是将元素从自身集合中移除,而后者则是返回一个新的集合。

@inlinable public mutating func subtract(_ other: Set
)@inlinable public __consuming func subtracting(_ other: Set
) -> Set

下面的方法实际是用两个集合的并集减去两个集合的交集,得到的结果是两个集合各自所拥有的元素的集合。

@inlinable public mutating func formSymmetricDifference(_ other: __owned Set
)

通过下面的方法,可以对集合中的值逐一处理,得到最终的结果。

let set1: Set = ["a","b","1","2","3","c"]let dic: Dictionary
= [:]let count = set1.reduce(into: dic) { result, string in if let number = Int(string) { result["number", default: 0] += 1 }else { result["string", default: 0] += 1 }}print(count)print(dic)

输出如下:

["number": 3, "string": 3][:]

可知,reduce(into:_:) 方法中,虽然闭包参数中的 result 参数使用 inout 修饰后,通过引用传参,修改的始终是同一个变量,但是,初始化该变量的参数仍然是拷贝的。

集合 Set 中同样有索引的概念,使用下面的方法可以获取第一个满足条件的元素的索引。

@inlinable public func firstIndex(where predicate: (Element) throws -> Bool) rethrows -> Set
.Index?@inlinable public subscript(position: Set
.Index) -> Element { get }

可以通过下面的方式,获取指定的元素在集合中的索引。

let set1: Set = ["a","b","1","2","3","c"]if let index = set1.index(of: "a") {    print(set1[index])}

转载地址:http://ipdws.baihongyu.com/

你可能感兴趣的文章
Expanding User-Defined Runtime Attributes in Xcode with Objective-C
查看>>
iOS7 UITabBar自定义选中图片显示为默认蓝色的Bug
查看>>
提升UITableView性能-复杂页面的优化
查看>>
25 iOS App Performance Tips & Tricks
查看>>
那些好用的iOS开发工具
查看>>
iOS最佳实践
查看>>
使用CFStringTransform将汉字转换为拼音
查看>>
更轻量的 View Controllers
查看>>
Chisel-LLDB命令插件,让调试更Easy
查看>>
时间格式化hh:mm:ss和HH:mm:ss区别
查看>>
When to use Delegation, Notification, or Observation in iOS
查看>>
Objective-C Autorelease Pool 的实现原理
查看>>
编程语言大牛王垠:编程的智慧,带你少走弯路
查看>>
ios指令集以及基于指令集的app包压缩策略
查看>>
iOS开发者的福利 — — iOS9+Xcode7免越狱免证书直接调试
查看>>
3、JavaWeb学习之基础篇—JSP
查看>>
4、JavaWeb学习之基础篇—Session
查看>>
5、JavaWeb学习之基础篇—标签(自定义&JSTL)
查看>>
8、JavaWEB学习之基础篇—文件上传&下载
查看>>
reRender属性的使用
查看>>