在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
Run Code Online (Sandbox Code Playgroud)
此外,您不能使用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))
Run Code Online (Sandbox Code Playgroud)
我能找到的打印2D阵列的最佳解决方案是执行以下操作:
scala> println(array.map(_.mkString(" ")).mkString("\n"))
0 0
0 0
Run Code Online (Sandbox Code Playgroud)
有没有更惯用的方法呢?
Arj*_*ijl 111
在Scala 2.8中,您可以使用deepArray上定义的方法,该方法返回一个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)
Run Code Online (Sandbox Code Playgroud)
返回的IndexedSeq默认有一个stringprefix'Array',所以我不确定这是否恰好提供了你想要的.
Eas*_*sun 36
这个怎么样:
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))
Run Code Online (Sandbox Code Playgroud)
aku*_*ako 15
为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>"
Run Code Online (Sandbox Code Playgroud)
试试这个:
// 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)
Run Code Online (Sandbox Code Playgroud)