我是scala的初学者。许多概念对我来说都不清楚。 我想问一下foreach是否可以得到(或控制)数组参数?
例如:
val array = Array.ofDim[Double](2,6)
我可以用来控制数组的参数,比如
for( i <- 0 until 2){
for(j <- 0 until 6){
......... }}
我可以使用 i,j 控制并获取参数。 “ foreach ”可以做到吗?
(我知道foreach可以在没有参数的情况下做事,但我只是想问一下它是否可以得到 数组参数?)
谢谢你:)答案 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]