相当于python itertools“cycle”的Scala等价物

2024-03-29 06:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有与python的等价物itertools.cycle公司()? 在

我想要一个数组的列表,并不断循环它们。所以,如果数组名为A到D,itertools.cycle公司可以做到:

itertools.cycle('[A,B,C,D]') --> A B C D A B C D...

这将“循环”或“滚动”原始集合。在

为了回答这个问题,我正在深入研究Scala流,但我想我会问一下是否缺少一些内置功能。在

谢谢!在


Tags: 功能列表公司数组内置itertoolsscala我会
2条回答

迭代器。连续会成功的

 Iterator.continually("scala").flatMap(x => x)

或者

^{pr2}$

Scala REPL

scala> Iterator.continually("scala").flatMap(x => x).take(100).foreach(println)

scala> Iterator.continually("scala": Seq[Char]).flatten.take(100).foreach(println)

或者

是的,你可以用Stream来建模

def cycle(str: String): Stream[String] = str #:: cycle(str)

用法:

cycle("scala").flatten

Scala REPL

scala> def cycle(str: String): Stream[String] = str #:: cycle(str)
cycle: (str: String)Stream[String]

scala> cycle("java").take(100)
res2: scala.collection.immutable.Stream[String] = Stream(java, ?)

scala> cycle("java").take(100).force
res3: scala.collection.immutable.Stream[String] = Stream(java, java, java, java, java, java, ... )

这里我使用了Stream对象的continually方法的组合,然后将结果展平,希望这有帮助:

scala> Stream.continually(array).flatten
res0: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> val array = Array(1, 2, 3, 4)
array: Array[Int] = Array(1, 2, 3, 4)

scala> val stream = Stream.continually(array).flatten
stream: scala.collection.immutable.Stream[Int] = Stream(1, ?)

scala> stream.take(10).foreach(println)
1
2
3
4
1
2
3
4
1
2

相关问题 更多 >