ios - Swift 中高阶函数(映射、过滤器等)的流式传输
问题描述
我已经阅读了多篇关于高阶函数filter, map, sort, reduce
等如何在Swift中工作的文章。
我想知道的是这些方法的内部工作。他们是否使用流媒体来产生最终输出?
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var arr1 = arr.map { $0 * $0 }.filter { $0 % 2 == 0 } //Output: [4, 16, 36, 64, 100]
我的意思是,在上面的代码中,每次map
处理来自 的元素时arr
,它会被传递到filter
而不等待map
处理中的所有元素arr
吗?
解决方案
不,他们没有。filter
仅在map
正常使用时完成时运行。
但是,您可以通过声明集合来更好地优化它,lazy
其中您的过滤只会在链中的下一个函数需要它时发生。这也防止了中间数组的创建。(否则每个函数都会创建一个新数组,然后将其传递给下一个函数)
看看这个关于惰性集合的一个很好的解释。- Swift 中的惰性集合
推荐阅读
- spring - 从一个 SFTP 读取具有 3 种不同命名模式的文件。并在 Spring Application 中进行不同的处理
- eigen - 试图将特征矩阵强制为硬编码地址
- append - 如何在 C++ 中使用 Rapidxml 将新的子节点附加到现有文件
- python - 如何计算第二个轴上的平均值,直到 Pytorch 中的特定行列?
- wordpress - Woocommerce 插件导致重定向
- java - 如何在java中使用mockito模拟局部变量
- mysql - 如何检索日期时间记录,转换为新时区并返回按新日期时间分组的结果,而不会出现 ONLY_FULL_GROUP_BY 错误
- laravel - ErrorException 试图在 Hasmany 关系中获取非对象的属性“名称”
- javascript - react 应用程序中 pdfjs-dist 的附加加载器?
- javascript - mongodb查询基于文档中的日期+ x天