Scala 播放框架枚举器:如何使用索引压缩枚举器

Scala 播放框架枚举器:如何使用索引压缩枚举器,scala,playframework,enumerator,Scala,Playframework,Enumerator,假设我有一个统计员 val e:枚举器[字符串]=枚举器(“a”、“b”、“c”) 还有另一个自然数的枚举器 val count=枚举器.ENUMATE(迭代器.from(1)) 我怎样才能生成一个枚举器来对它们进行压缩呢。或者用索引拉拉链。 因此,在这种情况下,输出为: val zipped:Enumerator[(String,Int)]=Enumerator((“a”,1),(“b”,2),(“c”,3))我对迭代者有些陌生,但由于还没有回复,我将分享我的不太专业的知识 似乎应该有一个zi

假设我有一个统计员

val e:枚举器[字符串]=枚举器(“a”、“b”、“c”)

还有另一个自然数的枚举器

val count=枚举器.ENUMATE(迭代器.from(1))

我怎样才能生成一个枚举器来对它们进行压缩呢。或者用索引拉拉链。 因此,在这种情况下,输出为:
val zipped:Enumerator[(String,Int)]=Enumerator((“a”,1),(“b”,2),(“c”,3))

我对迭代者有些陌生,但由于还没有回复,我将分享我的不太专业的知识

似乎应该有一个zip操作符来完成您描述的操作。最接近的是交错,但根据我对其行为的理解,我认为它不适合您的用例

如果您只需要为每个元素创建一个索引,那么您可以使用类似这样的内容(我承认丑陋的可变状态)

如果您希望在
var
(您应该这么做!)周围有一些东西无法关闭,您可以在iteratee一侧研究如何实现此功能,并在
步骤中作为状态传递计数器

scala> import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global

scala> import play.api.libs.iteratee._
import play.api.libs.iteratee._

scala> var counter = -1
counter: Int = -1

scala> Enumerator("a", "b", "c").map[(String, Int)]{ s => counter+=1; (s, counter) }
res1: play.api.libs.iteratee.Enumerator[(String, Int)] = play.api.libs.iteratee.Enumerator$$anon$3@3c0c6967

scala> res1 run Iteratee.foreach( println _ )
(a,0)
(b,1)
res2: scala.concurrent.Future[Unit] = scala.concurrent.impl.Promise$DefaultPromise@7814bb7d
(c,2)

scala>