首页 > 解决方案 > 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吗?

标签: iosarraysswiftswift4higher-order-functions

解决方案


,他们没有。filter仅在map正常使用时完成时运行。

但是,您可以通过声明集合来更好地优化它,lazy其中您的过滤只会在链中的下一个函数需要它时发生。这也防止了中间数组的创建。(否则每个函数都会创建一个数组,然后将其传递给下一个函数)


看看这个关于惰性集合的一个很好的解释。- Swift 中的惰性集合


推荐阅读