scala - 在 Scala 中,交错大量迭代器的最简单方法是什么?
问题描述
假设我有许多具有相同参数的迭代器:
val i1, i2, ..., in: Iterator[T]
现在我想将它们交错成一个大迭代器:
val cc: Iterator[Seq[T]]
在哪里:
cc(x)(1) = Seq(i1(x), i2(x), ... in(x))
并且 cc.next() 触发 next 在其所有元素上被调用。
最简单的方法是什么?
我试过递归压缩它们(这会导致高对象开销),或者使用 .transpose() 破坏它作为迭代器的效率。
解决方案
您可以创建自己的迭代器并根据您所需的逻辑定义它的工作方式next
和方式。hasNext
这假设迭代器与您指定的数量相同:
class MyIterator[T](iterators: List[Iterator[T]]) extends Iterator[List[T]] {
def hasNext = iterators.headOption.map(_.hasNext).getOrElse(false)
def next = iterators.map(_.next)
}
val iterators = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9)).map(_.toIterator)
iterators: List[Iterator[Int]] = List(non-empty iterator, non-empty iterator, non-empty iterator)
val it = new MyIterator(iterators)
测试:
while(it.hasNext)
println(it.next)
印刷:
List(1, 4, 7)
List(2, 5, 8)
List(3, 6, 9)
推荐阅读
- web-services - prestashop 1.7 使用 webservice 更新订单自定义字段
- sql - 有没有办法在 dateadd 中添加分数
- ms-word - Apache POI docx:HTML 作为 altChunk
- google-cloud-functions - 需要备份现有已部署的 firebase 功能
- php - 在变量中使用时调用数组上的成员函数 paginate()
- matlab - 如何使数据存储内存中的值全局化
- javascript - 如何制作可移动的模态?
- java - 测量绘制视图组所用的时间
- javascript - 使用 CSS 变换跟随鼠标光标
- loops - For循环以2的倍数delphi