我正在使用 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/