加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

斯威夫特的懒惰

发布时间:2020-12-14 05:26:51 所属栏目:百科 来源:网络整理
导读:为什么懒惰在这里使用? extension SequenceType { func mapSomeU(transform: Generator.Element - U?) - [U] { var result: [U] = [] for case let x? in lazy(self).map(transform) { result.append(x) } return result }} 此扩展使用返回可选的转换函数,
为什么懒惰在这里使用?
extension SequenceType {
    func mapSome<U>(transform: Generator.Element -> U?) -> [U] {
        var result: [U] = []
        for case let x? in lazy(self).map(transform) {
            result.append(x)
        }
        return result
    }
}

此扩展使用返回可选的转换函数,并返回仅包含未转换为nil的值的数组

为什么不使用self.map(转换)?这里有懒惰吗?

它避免了创建中间数组.
self.map(transform)

返回一个包含转换结果的数组
所有序列元素,然后遍历以构建
结果数组包含非零元素.

lazy(self).map(transform)

是一系列变换后的元素,然后是
迭代以获得非零元素.转化的元素
在枚举期间计算. (每次拨打下一个()
懒惰序列通过转换下一个元素产生一个元素
原始序列的元素.)

两种方法都有效.懒惰的方法可能会表现得更好对于大型序列,但这可能取决于许多因素(大小对于数组,无论元素是值还是引用类型,复制数组元素的成本是多少等).适用于小型阵列懒惰的方法可能会因为额外的而变慢高架.在具体的应用程序中,使用Instruments进行分析帮助决定使用哪种方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读