Scala相当于python itertools' cycle'

时间:2016-10-31 08:33:14

标签: python scala functional-programming generator itertools

是否有相当于python的itertools.cycle()?

我想获取一个数组列表并无休止地循环它们。因此,如果数组名为A到D,则itertools.cycle可以执行:

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

这个'周期'或者' roll'原来的收藏品。

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

谢谢!

2 个答案:

答案 0 :(得分:3)

在这里,我使用了var divs = document.getElementByTagName('div'); var lastDiv = divs[divs.length-1]; 对象的continually方法的组合,然后将结果展平,希望这会有所帮助:

Stream

答案 1 :(得分:1)

Iterator.continually 会做的伎俩

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

Iterator.continually("scala": Seq[Char]).flatten

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, ... )