Scala - 打印数组 [英] Scala - printing arrays

查看:59
本文介绍了Scala - 打印数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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 :

<预><代码>Scala> val 数组 = Array.fill(2,2)(0)数组: Array[Array[Int]] = Array(Array(0, 0), Array(0, 0))Scala> println(array.deep.mkString("\n"))数组(0, 0)数组(0, 0)

默认情况下,返回的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆