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(使用前将#替换为@)