2

Scalaに文字列の配列があるとしましょう:

val strings = Array[String]("1", "2", "3", "4", "5", "6", "7")

私が必要としているのは、最初の配列の3つ(任意の数)の結果として生じる各要素の連結として要素が取得される新しい配列を作成することです。("123", "456", "7")

Scalaを初めて使用するため、簡潔でも効果的でもない次のコードを作成しました。

var step = 3
val strings = Array[String]("1", "2", "3", "4", "5", "6", "7")
val newStrings = collection.mutable.ArrayBuffer.empty[String]

for (i <- 0 until strings.length by step) {
  var elem = ""
  for (k <- 0 until step if i + k < strings.length) {
    elem += strings(i + k)
  }
  newStrings += elem
}

これを行うためのScalaの方法は何でしょうか?

4

3 に答える 3

9
strings.grouped(3).map(_.mkString).toArray

また

strings grouped 3 map (_.mkString) toArray

私は個人的に最初のバージョンを好みます:)

于 2012-05-12T12:15:14.833 に答える
4
strings grouped 3 map (_.mkString)

または(本当に取り戻すためArrayに)

(strings grouped 3 map (_.mkString)).toArray
于 2012-05-12T12:14:39.153 に答える
3

...またはスライドを使用する

val strings = Array[String]("1", "2", "3", "4", "5", "6", "7")
strings.sliding (3, 3) .map (_.mkString).toArray

res19: Array[String] = Array(123, 456, 7)

スライド:3を取り、3を進めます。バリエーション:

scala> strings.sliding (3, 2) .map (_.mkString).toArray
res20: Array[String] = Array(123, 345, 567)

3を取るが、2を進める

scala> strings.sliding (2, 3) .map (_.mkString).toArray
res21: Array[String] = Array(12, 45, 7)

テイク2、フォワード3(これにより、3分の1ごとにスキップ)

于 2012-05-12T12:36:25.867 に答える