【问题标题】:Streaming in Higher Order Functions (map, filter etc.) in SwiftSwift 中高阶函数(映射、过滤器等)的流式传输
【发布时间】:2018-08-31 06:31:37
【问题描述】:

我已经阅读了多篇关于高阶函数 - 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 的元素时,它会不会等待map 处理完@987654327 中的所有元素而将其传递给filter @?

【问题讨论】:

    标签: ios arrays swift swift4 higher-order-functions


    【解决方案1】:

    ,他们没有。 filter只有在map正常使用完成后才会运行。

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


    查看这个关于惰性集合的非常好的解释。 - Lazy Collections in Swift

    【讨论】:

    • 执行不是和流式一样吗?
    • @PGDev 如果流式传输是指问题中的最后一段。那就不要。这篇文章有一个例子展示了它们是如何执行的。
    • 我的意思是流式传输 - 1. We iterate only once. 2. We get each element calculated through the pipe as we access them.
    • @PGDev 我相信如果你让收集在每一点都变得懒惰会发生什么。至少这是我从那篇文章中了解到的。不幸的是,我没有任何工作经验。我刚刚读到它,它是有道理的,我认为这就是你要找的。​​span>
    • 感谢您的回复。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 2021-02-25
    • 1970-01-01
    相关资源
    最近更新 更多