Scala Range(x, Int.MaxValue) 与 Stream.from(x)

标签 scala stream range

我是 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 的基于 Stream 的计算正在耗尽内存。我会期望相反的 - 谁能解释一下?

最佳答案

对于范围,它总是需要固定大小的内存。

对于流,它将缓存您甚至使用的所有元素。所以在 r2 中的 find 流期间一直增加直到内存不足。

关于Scala Range(x, Int.MaxValue) 与 Stream.from(x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13206552/

相关文章:

scala - 使用 sbt 构建命令行应用程序

scala - gradle 中的影子插件无法正常工作 - gradle build 不会构建 fat jar

html - 输入范围样式神秘改变

python - 是否可以在Python中的Range函数运行时更改它的值?

oop - 纯函数式编程上下文中的面向对象编程?

javascript - 从 Node.js 调用 Scala.js 的正确方法是什么?

java - 将 BLOB 从一个数据库读取到另一个数据库

java - 如何重新打开和中断键盘流?

javascript - Microsoft Edge 中流的新响应

javascript - contenteditable div 退格和删除文本节点问题