Swift 中的懒惰

2024-01-08

Why is lazy这里用的?

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(transform)?这里有必要偷懒吗?


它避免了创建中间数组。

self.map(transform)

返回一个array包含转换的结果all序列元素,然后将被遍历以构建 包含非零元素的结果数组。

lazy(self).map(transform)

is a sequence变换后的元素,则为 迭代以获得非零元素。变换后的元素 在枚举期间计算。 (每次调用next()在惰性序列上通过转换下一个元素来生成一个元素 原始序列的元素。)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 中的懒惰 的相关文章

随机推荐