Scala - 打印数组 [英] Scala - printing arrays
问题描述
Scala 似乎缺乏对打印数组的支持.如果你打印一个,你会得到你在 Java 中得到的默认垃圾:
scala>val 数组 = Array.fill(2,2)(0)数组: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))标度>打印(数组)[[我@d2f01d
此外,您不能使用 java.util.Arrays 类中的 Java toString/deepToString 方法:(或者至少我无法弄清楚)
scala>println(java.util.Arrays.deepToString(array))<console>:7: 错误:类型不匹配;发现:数组[数组[整数]]需要:数组[java.lang.Object]println(java.util.Arrays.deepToString(array))
我能找到的打印二维数组的最佳解决方案是执行以下操作:
scala>println(array.map(_.mkString(" ")).mkString("\n"))0 00 0
有没有更惯用的方式来做到这一点?
在 Scala 2.8 中,您可以使用定义在 Array 上的 deep
方法,该方法返回一个包含所有(可能是嵌套的)的 IndexedSeq这个数组的元素,然后调用 mkString :
默认情况下,返回的 IndexedSeq 确实有一个 stringprefix 'Array',所以我不确定这是否正是您想要的.
It seems like the support for printing arrays is somewhat lacking in Scala. If you print one, you get the default garbage you'd get in 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
Furthermore, you cannot use the Java toString/deepToString methods from the java.util.Arrays class: (or at least I cannot figure it out)
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))
The best solution I could find for printing a 2D array is to do the following:
scala> println(array.map(_.mkString(" ")).mkString("\n"))
0 0
0 0
Is there a more idiomatic way of doing this?
In Scala 2.8, you can use the deep
method defined on Array, that returns an IndexedSeq cointaining all of the (possibly nested) elements of this array, and call mkString on that:
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)
The IndexedSeq returned does have a stringprefix 'Array' by default, so I'm not sure whether this gives precisely what you wanted.
这篇关于Scala - 打印数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!