为什么mkString在Scala中不起作用?

时间:2018-05-12 17:04:48

标签: arrays scala tostring

我无法通过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,并将该数组作为元素而不是元素内部数组是数组缓冲区的独立元素。

3 个答案:

答案 0 :(得分:0)

如果要打印数组的每个元素,连接三次,条目之间有空格,那么它只是:

df5 = pd.merge(df1,df2, on = ['col1','col2'])
#if 2 column DataFrame   
#df5 = pd.merge(df1,df2)
print (df5)

  col1  col2
0   cx     1
1  cx2    12
2  cx2    12

它给出了:

println((for (e <- a) yield e * 3).mkString(" "))

(这是正确的顺序,因为您希望按字母顺序排序,ok thenok thenok then wootwootwoot yeahyeahyeah &lt; o&lt; w

如果要在打印前反转数组,可以将其初始化为

y

答案 1 :(得分:0)

我认为你的意思是

val ab = ArrayBuffer((for (e <- a if e != null) yield e*3): _*)

答案 2 :(得分:0)

使用更多功能方法的一些较短的答案:

val a = Array("woot","yeah","ok then").sorted.reverse
a.map(_ * 3).map(elem => print(elem + " ")

编辑: 如果你想在某个新变量中得到一个结果,你可以这样做:

val string = a.map(_ * 3).mkString(" ")