5

2D ベクター内の要素の最初の出現のインデックスを見つけたいとします。

val table = Vector.tabulate(10, 10)((x,y) => 10*x + y)
val row = table indexWhere (_.indexOf(42) != -1) // row = 4
val col = 
  if(row == -1) -1
  else table(row) indexOf 42 // col = 2

要素を含む行で indexOf が2回呼び出されるため、これは少し非効率的です。命令型コードに頼らずにこれを行うより良い方法はありますか?

4

2 に答える 2

0

Yuushiのソリューションの代替案を次に示します。

def findElement(table: Vector[Vector[Int]], elem: Int): (Int, Int) = {
    val row = table.indexWhere(_.contains(elem)) // Try to get index of vector containing element
    if (row > -1) (row, table(row).indexOf(elem)) // (row, col)
    else (-1, -1)
}
于 2019-02-19T10:02:38.020 に答える