我是 Scala 语言的新手。
我需要长类型的范围。
我需要第 1 步中的 [1, 2, 3 ... 10000000] 列表。如果我使用 Until/to ,则会因为使用 Long 而不是 Int 而收到错误。
我尝试编写一个简单的函数,它需要一个开始、一个结束和一个空列表,并生成一个 [start .. end] 列表。
这是我的功能:
def range_l(start : Long, end : Long, list : List[Long]) : List[Long] = {
if (start == end){
val add_to_list = start :: list
return add_to_list
}
else {
val add_to_list = start :: list
range_l(start + 1, end, add_to_list)
}
}
如果我这样称呼它:range_l(1L, 1000000L, List())
i get OutOfMemory
以下行中的错误:add_to_list = start :: list
你能给我什么建议?我怎样才能得到Range[Long]
或者我该如何优化该功能。如何避免内存不足?
谢谢。
您可以使用以下语法创建这样的范围:
val range = 1L to 10000000L
“L”是必需的,用于通知编译器这些文字是长整型而不是整型。
然后你就可以使用几乎所有List
实例上的方法range
。它不应该填满您的内存,因为中间值是在需要时生成的。该范围可以传递给任何期望的方法Traversable[Long]
, a Seq[Long]
, an Iterable[Long]
, etc.
但是,如果您确实需要一个List
只要打电话range.toList
(并增加堆大小以容纳所有列表元素)...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)