0

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

例如:

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

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

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

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

(我知道foreach可以不带参数做事,但我就是想问问能不能拿到数组参数?)

谢谢你 :)

4

2 回答 2

1

我不确定你在问什么。如果您询问如何逐项循环整个数组,那么您可以在没有嵌套推导的情况下做到这一点for。这将打印二维数组的内容:

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

如果您要问如何遍历数组的所有索引(我想也许这就是您所说的parameter的意思),那么您可以使用该indices属性:

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

如果您只是想indexOf跨 2D 数组进行操作,您可能可以在 Scala 中重用 indexOf 的 2D Vector解决方案。这就是我将其调整为您的代码的方式:

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)),因为8array(1)(2)

(注意:与 不同indexOf,使用 for 理解并不会在找到解决方案后立即短路。如果您通过调用 使索引范围变得惰性.iterator.view否则.toStream您将获得预期的短路行为。)

于 2013-11-05T15:32:13.960 回答
0

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

斯卡拉数组

于 2013-11-05T15:27:48.883 回答