[1,-2].filter({ print("filtered one"); return[1,2,3,-1,-2].filter({概述[1, 2, 3, -1, -2].filter({ $0 > 0 }).count // => 3[1, 2, 3, -1, -2].lazy.filter({ $0 > 0 }).count // => 3 将延迟添加到第二个语句的优点是什么?根据我的理解,当使用lazy变量时,内存在使用时被初始化为该变量.在这种情况下它是如何有意义的? 试着更详细地了解LazySequence的用法.我
[1,-2].lazy.filter({ print("filtered one"); return > 0 }) .reduce(0) { (total,elem) -> Int in print("counted one"); return total + 1 }
> 0 }) .reduce(0) { (total,elem) -> Int in print("counted one"); return total + 1 }> 0 }).count // => 3[1,-2].lazy.filter({ > 0 }).count // => 3
将延迟添加到第二个语句的优点是什么?根据我的理解,当使用lazy变量时,内存在使用时被初始化为该变量.在这种情况下它是如何有意义的? 试着更详细地了解LazySequence的用法.我曾使用过映射,减少和过滤序列上的函数,但从不使用延迟序列.需要了解为何使用此功能?解决方法 延迟更改数组的处理方式.如果不使用惰性,则filter会处理整个数组并将结果存储到新数组中.使用延迟时,序列或集合中的值是根据下游函数的要求生成的.值不存储在数组中;它们只是在需要时生产.
考虑这个修改过的例子,其中我使用了reduce而不是count,以便我们可以打印出正在发生的事情:
不使用懒惰:
在这种情况下,在计算任何项目之前,将首先过滤所有项目.
06001
使用懒惰:
在这种情况下,reduce是要求项目计数,过滤器将一直工作,直到找到一个,然后reduce将要求另一个,过滤器将工作,直到找到另一个.
06003
什么时候使用懒惰:
选项 – 点击懒惰给出了这样的解释:
从讨论懒惰:
在链接 *** 作时使用lazy属性:
要么
我想补充一点:
>当您希望下游流程更快地启动时,不必等待上游流程首先完成所有工作
因此,例如,如果您正在搜索第一个正Int,则您希望在过滤器之前使用延迟,因为搜索将在您找到一个时立即停止,并且它将保存过滤器不必过滤整个数组,它会节省必须为过滤后的数组分配空间.对于第3点,假设您有一个程序使用该范围上的过滤器显示1 … 10_000_000范围内的素数.您宁愿在找到它们时显示素数,而不是在显示任何内容之前等待计算它们.
总结
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出