【发布时间】:2020-03-27 07:04:38
【问题描述】:
如何将迭代器拆分为带有重复的前缀和其余部分?例如,
def splitDupes(it: Iterator[Int]): (Iterator[Int], Iterator[Int]) = ???
val (xs, ys) = splitDupes(List(1, 1, 1, 2, 3, 4, 5).iterator)
xs.toList // List(1, 1, 1)
ys.toList // List(2, 3, 4, 5)
val (xs, ys) = splitDupes(List(1, 2, 3, 4, 5).iterator)
xs.toList // List(1)
ys.toList // List(2, 3, 4, 5)
val (xs, ys) = splitDupes(List(1, 1, 1, 1, 1).iterator)
xs.toList // List(1, 1, 1, 1, 1)
ys.toList // List()
val (xs, ys) = splitDupes(List[Int]().iterator)
xs.toList // List()
ys.toList // List()
我可以用它来分块读取文本文件吗?
【问题讨论】:
-
在 List(1, 2, 3, 4, 1, 1) 的情况下会发生什么?
-
(1) 和 (2, 3, 4, 1, 1)
-
这有点棘手。我假设有一个前提条件,理想情况下,您无需阅读整个文件/列表即可执行此操作。在这种情况下,折叠,分区等是不可能的。我只能想到 (xs, ys) = (...takeWhile(), ....drop(n)) 这将是 O(2n) = O(n) 其中 n 是前缀的长度跨度>
-
是的,我不想阅读整个文件。无论如何感谢您的建议:)
-
没问题。如果 takeWhile & drop 方法没有意义,如果你愿意,我可以写一个简单的例子
标签: scala collections iterator