Scala Worksheet Intellij没有正确评估结果

时间:2016-11-15 12:37:33

标签: scala intellij-idea

我在IntelliJ工作表中运行此scala代码。

object sheet3 {
  println("Welcome to new worksheet")
  val nums = new Array[Int](10)
  for (i <- 0 until nums.length) nums(i) = i * i
  nums
  val a = Array("Hello", "Friend")

  a(0) = "Goodbye"
  println(a)

  for (i <- 0.until(a.length)) print(i)

}

然而,我得到了这个结果 Results

当我在scala repl中运行时,我希望这样做。

scala> val nums = new Array[Int](10)
nums: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

感谢您的帮助

其他问题

object reply extends App{
  println("Welcome world")
  val words = Array("Marry", "had", "a", "little", "lamb", "its", "fleece",
    "was", "white", "as", "snow")
  println(words.groupBy(_.substring(0, 1)))
  println(words.mkString(" "))
} 

以下结果

 Welcome world
    s -> [Ljava.lang.String;@32e6e9c3 f -> [Ljava.lang.String;@2669b199 a -> [Ljava.lang.String;@2344fc66 M -> [Ljava.lang.String;@458ad742 i -> [Ljava.lang.String;@5afa04c l -> [Ljava.lang.String;@6ea12c19 h -> [Ljava.lang.String;@6a024a67 w -> [Ljava.lang.String;@7921b0a2
    Marry had a little lamb its fleece was white as snow

Process finished with exit code 0

在上面的代码中,我如何得到结果来打印字符串而不是java.lang.String; @ 32e6e9c3。 尝试使用println(words.groupBy(_.substring(0, 1)).mkString)

时失败

2 个答案:

答案 0 :(得分:1)

在scala中,Array[T]只是java T[]的表示。特别是,它们继承了toString的Java实现,其结果类似于[I@233fa27

打印数组内容的更常用方法是使用mkString

scala>   val nums = new Array[Int](10)
nums: Array[Int] = [I@119ad2c5

scala> nums.mkString(",")
res1: String = 0,0,0,0,0,0,0,0,0,0

答案 1 :(得分:1)

第二个问题的答案很像第一个问题的答案。问题是您正在使用Array来实现丑陋的Java toString。如果您使用的是SeqVectorList等Scala集合,则会看到更清晰的输出。

由于groupBy()输出为Map[String, Array[String]],因此在将mkString应用于Array之前,您必须先了解地图的值}。

这是一种方式......

println(words.groupBy(_.substring(0, 1)).mapValues(_.mkString))

...如果你这样做的话,它会更加惯用(也许更容易阅读输出)......

words.groupBy(_.substring(0, 1)).mapValues(_.mkString).foreach(println)