斯卡拉 – 印刷arrays

Scala似乎对打印arrays的支持有点不足。 如果你打印一个,你会得到你在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方法:(或者至less我不能弄明白)

 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)) 

我可以find打印二维数组的最佳解决scheme是:

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

有没有更习惯的做法呢?

在Scala 2.8中,你可以使用Array上定义的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',所以我不确定这是否给出了你想要的。

这个怎么样:

 scala> val array = Array.fill(2,2)(0) array: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0)) scala> import scala.runtime.ScalaRunTime._ import scala.runtime.ScalaRunTime._ scala> val str = stringOf(array) str: String = Array(Array(0, 0), Array(0, 0)) 

给Arjan的答案添加一点点 – 你可以使用mkString方法来打印,甚至指定元素之间的分隔符。 例如 :

 val a = Array(1, 7, 2, 9) a.mkString(" and ") // "1 and 7 and 2 and 9" a.mkString("<", ",", ">") //mkString(start: String, sep: String, end: String) // "<1,7,2,9>" 

试试这个:

  // create an array val array1 = Array(1,2,3) // print an array elements seperated by comma println(array1.mkString(",")) // print an array elements seperated by a line println(array1.mkString("\n")) // create a function def printArray[k](a:Array[k])= println(a.mkString(",")) printArray(array1) 

这样做的“函数式编程”方式(据我所知)是:

 scala> array foreach{case a => a foreach {b => print(b.toString + " ")}; print('\n')} 0 0 0 0 

或者如果你不太在意间距:

 scala> array foreach{a => a foreach println} 0 0 0 0 

恕我直言,函数式编程可能会变得有点混乱,如果这需要太长的时间,我会说只是采取必要的方式。

您可以使用自定义分隔符对数组[Array [Somethings]]整齐地格式化内部以及外部数组:

  def arrayToString(a: Array[Array[Int]]) : String = { val str = for (l <- a) yield l.mkString("{", ",", "}") str.mkString("{",",\n","}") } val foo = Array.fill(2,2)(0) println(arrayToString(foo)) 

这导致:

  {{0,0}, {0,0}}