scala - Scala 中的更大循环

标签 scala functional-programming folding

我正在使用 Scala 创建一个程序,但是我遇到了循环可以执行多少次迭代的问题。在 Scala 中进行函数式编程和编程时,我仍然很陌生,但这就是我目前所拥有的:

val s = Range(1, 999999999).view.foldLeft(0)(_ + _ / whatever);

但是我无法让循​​环说比 999999999 大几个数量级,比如在 long 的最大值中。我知道我可以使用 for 循环,但我看不到折叠选项。

有谁知道这是如何实现的?

谢谢。

最佳答案

正如您所发现的,Seqs 不能包含多个 Int.MaxValue 元素。在 feature 修复之前,不要使用 Seq。你可以

1)使用while循环

2) 使用 for-loop without a sequence

但是通过这些方式,你不能在你的例子中使用像 foldLeft 这样的 Scala 集合的方法。

所以你需要的是一个 Iterator 。例如

def bigIterator(start: BigInt, end: BigInt, step: BigInt = 1) = 
  Iterator.iterate(start)(_ + step).takeWhile(_ <= end)

然后
bigIterator(0, BigInt("3000000000")).foldLeft(BigInt(0))(_ + _)

等会起作用。注意:如果您不需要完整范围的 BigInt ,请改用 Long ,因为它明显更快。

关于scala - Scala 中的更大循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965448/

相关文章:

java - 如何读取ASM中的最终字符串值?

scala - 使用 Scala Akka 框架来阻止 CLI 调用

list - 在 Haskell 中过滤列表

eclipse - 如何使用 Coffee-Bytes 代码折叠

scala - *(星号)和_(下划线)在类型参数中的区别

scala - 使用 deb 文件和 SBT 为生产设置日志记录/配置

java - 使用 ifPresent 在 JAVA 8 中检查 NULL 安全对象

scala - 如何用尾部映射列表项[Scala]

vim - 有没有办法在vim中折叠少于一行?

json - 折叠 JSON 字符串的正确语法是什么?