首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Scala -打印数组

Scala -打印数组
EN

Stack Overflow用户
提问于 2010-07-25 13:02:46
回答 8查看 81K关注 0票数 73

在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

有没有一种更惯用的方式呢?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 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’,所以我不确定这是否给出了您想要的结果。

票数 115
EN

Stack Overflow用户

发布于 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))
票数 39
EN

Stack Overflow用户

发布于 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>" 
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3328085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档