斯卡拉 – 印刷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}}