我不确定你在问什么。如果您询问如何逐项循环整个数组,那么您可以在没有嵌套推导的情况下做到这一点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))
,因为8
在array(1)(2)
。
(注意:与 不同indexOf
,使用 for 理解并不会在找到解决方案后立即短路。如果您通过调用 使索引范围变得惰性.iterator
,.view
否则.toStream
您将获得预期的短路行为。)