有没有人知道如何在scala中创建一个懒惰的迭代器?
例如,我想迭代实例化每个元素。传递之后,我希望实例能够从内存中删除。
如果我声明一个像这样的迭代器:
val xs = Iterator(
(0 to 10000).toArray,
(0 to 10).toArray,
(0 to 10000000000).toArray)
在声明xs时创建数组。这可以证明如下:
def f(name: String) = {
val x = (0 to 10000).toArray
println("f: " + name)
x
}
val xs = Iterator(f("1"),f("2"),f("3"))
打印:
scala> val xs = Iterator(f("1"),f("2"),f("3"))
f: 1
f: 2
f: 3
xs: Iterator[Array[Int]] = non-empty iterator
有人有什么想法吗?
Streams不适合,因为元素保留在内存中。
注意:我使用数组作为示例,但我希望它适用于任何类型。
答案 0 :(得分:2)
Scala集合有一个view
方法,它产生一个懒惰的集合。因此,请使用(0 to 10000).toArray
而不是(0 to 10000).view
。这样,内存中就不会创建任何数组。另请参阅https://stackoverflow.com/a/6996166/90874,https://stackoverflow.com/a/4799832/90874,https://stackoverflow.com/a/4511365/90874等。