【发布时间】:2018-10-22 20:08:56
【问题描述】:
在 Scala 中,我无法像字符串一样正常打印数组
val a = Array("woot","yeah","ok then").sorted
for (i <- a.length-1 to 0 by -1)
println(s"$i: ${a(i)}")
val ab = ArrayBuffer(for (e <- a if e != null) yield e*3)
println(ab.mkString(" "))
由于某种原因,这会打印:
2: yeah
1: woot
0: ok then
ArrayBuffer([Ljava.lang.String;@5034c75a)
我期待它打印"yeahyeahyeah wootwootwoot ok thenok thenok then",即数组中的项目(作为字符串)以空格分隔。为什么它不起作用,我做错了什么?
编辑: 好的,这表明因为我将 ab 初始化为一个元素 ArrayBuffer,该数组作为元素,而不是该内部数组的元素是分开的数组缓冲区的元素。
【问题讨论】:
-
一切看起来都如预期的那样,你得到了你想要的。问题究竟出在哪里?为什么一直嵌套数组和数组缓冲区,有什么意义呢?这个问题似乎包含太多令人分心的信息。您能否专注于一个有问题的
println,而不是七个不同的printlns?println(a.mkString(" "))怎么了? -
问题是我希望它将数组中的项目打印为用“”分隔的字符串,而不是“ArrayBuffer(....)”
-
再次:最明显的解决方案
a.mkString(" ")有什么问题呢? -
-
ArrayBuffer的内容是单个元素(for-yield生成的数组)。此单个元素的默认toString会产生不可读的[Ljava.lang.String;@blah)-thingie。在这个阶段用空格将单个元素与其自身分开并没有帮助。只是不要将数组嵌套在数组缓冲区中,在这种情况下没有任何意义。