Scala Range(x,Int.MaxValue)与Stream.from(x)
发布时间:2020-12-16 18:55:16 所属栏目:安全 来源:网络整理
导读:我是 Scala初学者,用 Project Euler练习我的FP技能. 在研究“Problem 5:可以被1到20的所有数字整除的最小正数时,我正在比较基于范围与流的解决方案: val r1 = Range(20,Int.MaxValue).find(i = (2 to 20).forall(i % _ == 0)).getval r2 = Stream.from(20).
我是
Scala初学者,用
Project Euler练习我的FP技能.
在研究“Problem 5:可以被1到20的所有数字整除的最小正数时,我正在比较基于范围与流的解决方案: val r1 = Range(20,Int.MaxValue).find(i => (2 to 20).forall(i % _ == 0)).get val r2 = Stream.from(20).find(i => (2 to 20).forall(i % _ == 0)).get 奇怪的是,r1的计算在大约20秒内完成,而基于流的r2计算耗尽了内存.我本来期待相反的 – 有人可以解释一下吗? 解决方法
对于范围,它总是需要固定大小的内存.
对于流,它将缓存您甚至使用的所有元素.所以在查找r2中的流时,一直保持增加直到内存不足. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |