假设我想 groupBy
在迭代器上,编译器要求“value groupBy is not a member of Iterator[Int]
”。一种方法是将迭代器转换为我想避免的列表。我想做groupBy
这样输入是 Iterator[A]
和输出是 Map[B, Iterator[A]]
.这样只有在访问元素的那部分时才加载迭代器的部分,而不是将整个列表加载到内存中。我也知道可能的键集,所以我可以判断一个特定的键是否存在。
def groupBy(iter: Iterator[A], f: fun(A)->B): Map[B, Iterator[A]] = {
.........
}
最佳答案
我认为如果不将结果存储在内存中,这是不可行的(在这种情况下,切换到列表会容易得多)。 Iterator
意味着您只能对整个集合进行一次传递。
例如,假设您有一个序列 1 2 3 4 5 6
你想groupBy
奇偶数:
groupBy(it, v => v % 2 == 0)
然后你可以用
true
查询结果和 false
得到一个迭代器。如果您将这两个迭代器中的一个循环到最后,您将无法为另一个迭代器做同样的事情(因为您无法在 Scala 中重置迭代器),那么问题就来了。如果元素按照您在
groupBy
中使用的相同规则进行排序,这将是可行的。 .
关于scala - 如何 groupBy 迭代器而不将其转换为 Scala 中的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427059/