4

シナリオ:

val col: IndexedSeq[Array[Char]] = for (i <- 1 to n) yield {
   val x = for (j <- 1 to m) yield 'x'
   x.toArray
}

これはかなり単純な char マトリックスです。toArray更新を許可するために使用されます。

  var west = last.x - 1
  while (west >= 0 && arr(last.y)(west) == '.') {
      arr(last.y)(west) = ch;
      west -= 1;
  }

これは、ドット以外の文字が見つかるまですべて.を更新しています。ch

一般的に、停止条件が満たされるまで更新します。ステップ数は不明です。

それに相当する慣用句は何ですか?

結論

それは実行可能ですが、トレードオフはそれだけの価値がありません。コレクションが更新を許可する場合、多くのパフォーマンスが表現力豊かな構文に失われます。

4

2 に答える 2

2

x3roの答えは正しい答えです、特に。パフォーマンスを重視する場合、またはこの操作を複数の場所で使用する場合。コレクション API で見つけたものだけを使用して、簡単なソリューションを追加したいと思います。

col.map { a =>
  val (l, r) = a.span(_ == '.')
  l.map {
    case '.' => ch
    case x => x
  } ++ r
}
于 2013-10-29T13:18:25.527 に答える