在Scala中似乎缺少对打印数组的支持。如果打印一个,就会得到在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))
我能找到的打印2D数组的最佳解决方案是执行以下操作:
scala> println(array.map(_.mkString(" ")).mkString("\n"))
0 0
0 0
有没有一种更惯用的方式呢?
发布于 2010-07-25 13:16:22
在Scala2.8中,您可以使用在数组上定义的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’,所以我不确定这是否给出了您想要的结果。
发布于 2010-07-25 17:45:08
这样如何:
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))
发布于 2015-09-02 13:15:36
除了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>"
https://stackoverflow.com/questions/3328085
复制相似问题