Swift学习之集合的reduce 操作详解
来源:互联网 发布:老滚捏脸数据 编辑:程序博客网 时间:2024/06/05 08:24
一位朋友问我:「在swift开发中,对集合执行 reduce 操作的时候,是否有比 .reduce(Set()) { $0.union(CollectionOfOne($1)) }更好的方法?」。这位朋友需要从一个外部数据源中获取相关的数据结果,然后将其填充到集合里。
我们就如何实现这一点提出了一些想法。在获取所有项目(item)之前,是否需要对集合进行检索呢?(答案是不需要)数据集是否会过于庞大,以至于不可能在创建集合之前将中间结果存储到数组当中?(答案是不会)。
我构建了一套测试,首先尝试他的 reduce 方法,此外也尝试了通常所使用的 insert 等多种操作。我事前以为使用 Set的构造器来处理已预先计算 (pre-computed) 的数组可能是最好的方法,但是事实证明:union 和 insert 在重复测试中的表现更好。
timetest("initializer") { // 0.652348856034223
var x: Set= []
(1 ... 5_000).forEach { _ in
x = Set(letters)
}
}
timetest("union") { // 0.524669112986885
var x: Set= []
(1 ... 5_000).forEach { _ in
x = x.union(letters)
}
}
timetest("insert") { // 0.572339564969297
var x: Set= []
(1 ... 5_000).forEach { _ in
x = []
letters.forEach ({ x.insert($0) })
}
}
timetest("reduce") { // 0.762973523989785
(1 ... 5_000).forEach { _ in
var x = letters.reduce(Set()) {
$0.union(CollectionOfOne($1))
}
}
}
这结果令我感到惊讶,因为您可能会觉得 init<Source : Sequence where Source.Iterator.Element == Element>(_ sequence: Source) 以及 func union<S : Sequence where S.Iterator.Element == Element>(_ other: S) -> Set<Element> 拥有相同的性能。
不过我不感到惊讶的一点是:比起将中间数据存储在数组当中并籍此来直接构建集合,使用 reduce 来不停地构建集合的性能开销要大很多。只要数组的尺寸受到合理的限制(需要足够大,但是也不能太大,否则就会对应用内存造成负担),那么使用中间数组无疑是一个更好的办法。不过对于海量数据而言,Set(collectedResults) 的性能比 insert、formUnion 以及 reduce/union 更优异。
来源:swiftgg
0 0
- Swift学习之集合的reduce 操作详解
- Swift详解之五-----------map,filter,reduce
- Swift 学习之集合的基本用法
- Swift化零为整:Reduce 详解
- hadoop学习之:Map、Reduce详解
- IOS Swift学习之集合类型
- 【opencv学习之十六】像素操作和Reduce Color的例子
- iOS swift学习之入门详解(swfit的介绍)
- Swift学习 字符串的操作
- spark 的reduce操作
- Swift学习笔记(二)字符串和集合类型操作
- Swift学习之条件操作和循环
- swift学习之String常见操作
- Swift学习 集合(NSSet)
- Django学习之模型的操作详解
- spark1.2.0源码分析之RDD的reduce操作
- Swift之集合
- iOS swift学习之入门详解(函数)
- 使用SublimeText 作为Python 的开发环境
- UVALive7220
- 简单好用的上拉加载下拉刷新 BaseRecyclerViewAdapterHelper
- linux初学<习题二>如何打开一个bash?
- Digimat-MF:平均场均匀化——(五)方向张量
- Swift学习之集合的reduce 操作详解
- 学到javascript的函数了。
- Linux内核中断机制(三):中断处理上
- OpenGL 入门11
- 关于数据结构的理解超级棒的网站!!!!
- mysqldump 导出中文乱码
- 命令行操作记录工具
- Android 如何优雅的打印日志
- 用函数判断大小端字节序