1. ホーム
  2. scala

Scala - 配列を表示する

2023-10-27 19:25:56

質問

Scalaでは配列の印刷のサポートがやや不足しているように思えます。 もし1つを印刷すると、Javaで得られるようなデフォルトのゴミが出ます。

scala> val array = Array.fill(2,2)(0)             
array: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))

scala> println(array)
[[I@d2f01d

さらに、java.util.ArraysクラスのJavaのtoString/deepToStringメソッドは使用できません:(少なくとも私はそれを理解することはできません)。

scala> println(java.util.Arrays.deepToString(array))
<console>:7: error: type mismatch;
 found   : Array[Array[Int]]
 required: Array[java.lang.Object]
       println(java.util.Arrays.deepToString(array))

2次元の配列を印刷するために私が見つけた最良の解決策は、次のようにすることです。

scala> println(array.map(_.mkString(" ")).mkString("\n"))
0 0
0 0

もっと慣用的なやり方はないのでしょうか?

どのように解決するのですか?

Scala 2.8では、Scala 2.0と同様に deep メソッドが定義されており、この配列の全ての(ネストされた可能性のある)要素を含むIndexedSeqを返し、それに対してmkStringを呼び出すことができます。


scala> val array = Array.fill(2,2)(0)
array: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))

scala> println(array.deep.mkString("\n"))
Array(0, 0)
Array(0, 0)

返されたIndexedSeqはデフォルトでstringprefix 'Array'を持っているので、これが正確にあなたが望んだものを与えるかどうかはわかりません。