Arrays 如何在scala中将数组元素用作for循环索引变量 我正在学习Scala,我试图在Scala中执行这个C++代码,但是我得到了编译错误。下面是C++代码: for(reels[0] = 0; reels[0] < 10; reels[0]++) doStuff();

Arrays 如何在scala中将数组元素用作for循环索引变量 我正在学习Scala,我试图在Scala中执行这个C++代码,但是我得到了编译错误。下面是C++代码: for(reels[0] = 0; reels[0] < 10; reels[0]++) doStuff();,arrays,scala,for-loop,Arrays,Scala,For Loop,如果我用一个常规的Int变量替换revels(0),它可以正常工作。为什么会这样,更重要的是,我将如何迭代数组元素。更具体地说,我想做的是嵌套5个循环,让每个循环一次迭代一个卷。我不想定义5个单独的变量来回避这个问题 提前感谢。可能这种方法会帮助您: var reels: Array[Int] = new Array[Int](5) def doStuff(): Unit = { print(reels(0) + " ") } (0 until 10).foreach(i => {

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


提前感谢。

可能这种方法会帮助您:

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 

还要注意巴里的评论。特别是对于
@missingfaktor

这可能是您想要的:

// 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)
def doStuff(v:Int)=println(v)
val reel=顺序(0到9,0到9)
为了{

外部根据您上面的评论,这就是您要寻找的吗?没有从索引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
   }
  }
val-reels1:Array[Int]=新数组[Int](10)
val RELELS2:数组[Int]=新数组[Int](10)
val RELELS=序列(RELELS1,RELELS2)
reels.foreach{reel=>

对于(项目我找到了一个答案,但对我来说似乎有点麻烦。可能是因为我不习惯这样做。我想要的是这样的:

{Array.tablate(10,10…{(reel1,reel2,…reel5)=>/*这是我想要避免的操作。为我将要使用的每个维度定义一个变量*/
do_stuff(reel1,reel2,…reel5)}

这篇文章对James DW已经回答了你的问题进行了很好的解释,我强烈建议你开始尝试用功能的方式思考。我这么说,因为你第一次尝试使用
Array[T]并将其存储在 var Value/Cube >中,这两种结构都是可变的。通过使用C++中面向对象或命令式范例学习Scala可能会感到舒服。Scalas的真实能力,特别是如果在例子中涉及到列表的话,就在于集合组合器或尾部。但是递归调用。实际上,我不相信我的问题已经得到了回答。我有5个卷,但为了简单起见,让我们假设2个卷,每个卷有10个停止。我想说:卷(0)从0到9,然后卷(1)从0到9。我不希望变量从0到1(即转到每个卷)。谢谢。不,不完全是。我不希望reels1是数组。我希望reels是数组。我希望reels(1)遍历值1到10,reels(2)遍历值1到10。我不需要在reels上同时保存所有值1到10。我希望数组为“reels”,一次保存两个数字,我想将这两个数字设置为两个嵌套的for循环。在scala解释器中键入代码后,这与我想要的接近,但不完全相同。但是谢谢。这很有用。好的,很好-我可以进一步修改,但不确定我是否清楚您想要的是什么。您想要数组数组吗?所以reel是Array包含两个项目,其中每个项目本身是一个数组?然后你想迭代顶级数组中的每个项目及其所有子数组?好的,我认为这将说明我想做得更好。假设我有一个二维矩阵,我想遍历矩阵上的每个元素。假设矩阵是10x10以保持一致性以示例为例。我想定义一个数组(一个点),该数组遍历矩阵的每个元素。因此,在任何时候,该点都有两个坐标。一行和一列。我想要两个for循环来迭代该点上的坐标,以便访问矩阵中的每个元素。感谢您的帮助。
// create your list of numbers
val reels = 0 to 9
// do something with each one.
reels.foreach {
  doStuff
}
 def doStuff(v: Int) = println(v)
 val reel = Seq(0 to 9, 0 to 9)
 for {
   outer <- reel
   inner <- outer
 }
  yield doStuff(inner)
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
   }
  }