关键字“foreach”可以获取数组参数吗?

时间:2013-11-05 15:22:56

标签: arrays scala foreach

我是scala的初学者。许多概念对我来说都不清楚。 我想问一下foreach是否可以得到(或控制)数组参数?

例如:

val array = Array.ofDim[Double](2,6)

我可以用来控制数组的参数,比如

for( i <- 0 until 2){
   for(j <- 0 until 6){
      .........      }}

我可以使用 i,j 控制并获取参数。 “ foreach ”可以做到吗?

(我知道foreach可以在没有参数的情况下做事,但我只是想问一下它是否可以得到  数组参数?)

谢谢你:)

2 个答案:

答案 0 :(得分:1)

我不确定你问的是什么。如果您要询问如何逐项循环遍历整个数组,那么您可以在不嵌套for理解的情况下执行此操作。这将打印2D数组的内容:

for (row <- array; col <- row) println(col)

如果你问如何循环遍历数组的所有索引(我想也许这就是你说参数时的意思),然后你可以使用indices属性:

for (i <- array.indices; j <- array(i).indices) println(array(i)(j))

如果您只是尝试在2D数组中执行indexOf,则可以重新使用 indexOf for 2D Vector in Scala 的解决方案。这就是我如何使其适应您的代码:

val array = Array.tabulate(2,6)(_*6+_)
val searchValue = 8
val indices: Option[(Int, Int)] = 
  (for {
     i <- array.indices
     j <- array(i).indices
     if (array(i)(j) == searchValue)
   } yield (i, j)).headOption

如果没有值匹配,您将获得indices = None。在这种情况下,有匹配项,因此您获得indices = Some((1,2)),因为8位于array(1)(2)

(注意:与indexOf不同,使用for comprehension一旦找到解决方案就不会短路。如果通过调用.iterator使{= 1}}使得索引范围变得懒惰,{{ 1}}或.view然后您将获得预期的短路行为。)

答案 1 :(得分:0)

你可以使用将返回位置的函数[indexOf(elem:T):Int]

Scala Array