我如何使用Scala进行索引更改?

时间:2016-12-05 11:22:12

标签: java scala

我在Scala的循环中遇到了问题: 在java中,我可以这样做:

for(int i=1;i<list.length;i=i*2

但我怎么能在scala中做同样的事情? Scala的索引不能改变

2 个答案:

答案 0 :(得分:4)

scanLeft方法在那里可能会有所帮助:

def exps(n: Int, p: Int) = (0 until n).scanLeft(1)((acc, _) => acc * p)

val list = List(2, 3, 5, 7)
for (i <- exps(list.size, 2)) println(i)
1
2
4
8
16

或使用无限流:

def expStream(p: Int, i: Int = 1): Stream[Int] = i #:: expStream(p, i * p)

for (i <- expStream(2).take(list.size)) println(i)

你也可以使用Stream.iterate(这有点简洁),正如Gyro Gearless在答案中所说:

def expStream(p: Int) = Stream.iterate(1)(_ * p)

答案 1 :(得分:3)

惯用的方法是从函数“* 2”创建一个Stream:

import Stream._
val potsOfTwo = Stream.iterate (1) (_ * 2).takeWhile (_ < 1000)
potsOfTwo.foreach { println _ }

阶&GT; potsOfTwo.foreach {println _} 1 2 4 8 16 32 64 128 256 512

相关问题