我已经在 Swift 中浏览过有关高阶功能-filter, map, sort, reduce
等如何工作的多篇文章。
我想知道的是这些方法的内部工作。他们是否使用流产生最终输出?
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
中的所有元素?
答案 0 :(得分:2)
否,他们没有。 filter
仅在正常使用map
完成时运行。
不过,您可以通过声明集合lazy
来更好地优化它,其中只有当需要从链中下一个函数进行过滤时,才进行过滤。这也阻止了创建 intermediate 数组。 (否则,每个函数都会创建一个 new 数组,然后将其传递给下一个函数)
查看此内容,以获取有关延迟集合的非常好的说明。 -Lazy Collections in Swift