如何在scala中使用数组元素作为for循环索引变量

时间:2014-12-23 20:49:40

标签: arrays scala for-loop

我正在学习scala,我试图在scala中做相当于这个C ++代码,但是我遇到了编译错误。这是c ++代码:

for(reels[0] = 0; reels[0] < 10; reels[0]++)
  doStuff();

我试图在scala中实现这个循环,如:

var reels: Array[Int] = new Array[Int](5)

for(reels(0) <- 0 until 10)
  doStuff

这会导致for循环出现编译错误:

variable reels is not a case class, nor does it have an unapply/unapplySeq member

如果我将reels(0)替换为常规Int变量,则可以正常使用。为什么这样,更重要的是,我将如何迭代数组元素。更具体地说,我想要做的是嵌套5个循环,并让每个循环一次只迭代一个卷轴。我不想定义5个单独的变量来解决这个问题。

提前致谢。

5 个答案:

答案 0 :(得分:1)

这可能是你想要的:

// create your list of numbers
val reels = 0 to 9
// do something with each one.
reels.foreach {
  doStuff
}

编辑: 根据您上面的评论,您可能想尝试一下comp。

 def doStuff(v: Int) = println(v)
 val reel = Seq(0 to 9, 0 to 9)
 for {
   outer <- reel
   inner <- outer
 }
  yield doStuff(inner)

答案 1 :(得分:0)

可能这种方法会对你有所帮助:

var reels: Array[Int] = new Array[Int](5)

def doStuff(): Unit = {
  print(reels(0) + " ")
}
(0 until 10).foreach(i => { reels(0) = i; doStuff })

// produces
// 0 1 2 3 4 5 6 7 8 9 

另请注意@Barry的评论link。特别是@missingfaktor&#39; answer

答案 2 :(得分:0)

reels.foreach { item =>
  //do something i.e. - println(item)
}

答案 3 :(得分:0)

根据您的上述评论,这是您要找的?没有显式变量从索引0处的reels1到索引1处的reel2?

val reels1: Array[Int] = new Array[Int](10)
val reels2: Array[Int] = new Array[Int](10)

val reels = Seq(reels1,reels2)
 reels.foreach{ reel =>
  for(item <- reel){
   doStuff
   }
  }

答案 4 :(得分:0)

我找到了答案,但对我来说似乎有些麻烦。也许是因为我不习惯这样做。我想要的是这样的:

{Array.tabulate(10,10 ...){(reel1,reel2,... reel5)=&gt; / *这是我想避免做的事情。为我将使用的每个维度定义一个变量* /   do_stuff(reel1,reel2,... reel5)}}