Swift   发布时间:2022-04-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了数组 – 为什么以及何时在Swift中使用lazy与Array?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
[1,2,3,-1,-2].filter({ $0 > 0 }).count // => 3

[1,-2].lazy.filter({ $0 > 0 }).count // => 3
@H_673_7@将延迟添加到第二个语句的优点是什么?根据我的理解,当使用lazy变量时,内存在使用时被初始化为该变量.在这种情况下它是如何有意义的?

@H_673_7@

数组 – 为什么以及何时在Swift中使用lazy与Array?

@H_673_7@试着更详细地了解LazySequence的@L_675_3@.我曾使用过映射,减少和过滤序列上的函数,但从不使用延迟序列.需要了解为何使用此功能

解决方法

延迟更改数组的处理方式.如果不使用惰性,则filter会处理整个数组并将结果存储到新数组中.使用延迟时,序列或集合中的值是根据下游函数的要求生成的.值不存储在数组中;它们只是在需要时生产. @H_673_7@ @H_673_7@虑这个修改过的例子,其中我使用了reduce而不是count,以便我们可以打印出正在发生的事情:

@H_673_7@不使用懒惰:

@H_673_7@在这种情况下,在计算任何项目之前,将首先过滤所有项目.

@H_673_7@
[1,-2].filter({ print("filtered one"); return $0 > 0 })
    .reduce(0) { (@R_61_10586@l,elem) -> Int in print("counted one"); return @R_61_10586@l + 1 }
@H_673_7@使用懒惰:

@H_673_7@在这种情况下,reduce是要求项目计数,过滤器将一直工作,直到找到一个,然后reduce将要求另一个,过滤器将工作,直到找到另一个.

@H_673_7@
[1,-2].lazy.filter({ print("filtered one"); return $0 > 0 })
    .reduce(0) { (@R_61_10586@l,elem) -> Int in print("counted one"); return @R_61_10586@l + 1 }
@H_673_7@什么时候使用懒惰:

@H_673_7@选项 – 点击懒惰给出了这样的解释:

@H_673_7@

数组 – 为什么以及何时在Swift中使用lazy与Array?

@H_673_7@从讨论懒惰:

@H_673_7@在链接操作时使用lazy属性

@H_673_7@>防止中间操作分配存储

@H_673_7@要么
>当您只需要最终集合的一部分时,以避免不必要的计算

@H_673_7@我想补充一点:
>当您希望下游流程更快地启动时,不必等待上游流程首先完成所有工作

@H_673_7@因此,例如,如果您正在搜索一个正Int,则您希望在过滤器之前使用延迟,因为搜索将在您找到一个时立即停止,并且它将保存过滤器不必过滤整个数组,它会节省必须为过滤后的数组分配空间.

@H_673_7@对于第3点,假设您有一个程序使用该范围上的过滤器显示1 … 10_000_000范围内的素数.您宁愿在找到它们时显示素数,而不是在显示任何内容之前等待计算它们.

大佬总结

以上是大佬教程为你收集整理的数组 – 为什么以及何时在Swift中使用lazy与Array?全部内容,希望文章能够帮你解决数组 – 为什么以及何时在Swift中使用lazy与Array?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。