2016-11-15 56 views
0

我在IntelliJ Worksheet中運行這個scala代碼。Scala Worksheet Intellij沒有正確評估結果

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

我希望這不是我在斯卡拉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)

回答

1

回答你的第二個問題是很像答案1日。問題在於你使用的是Array,它實現了醜陋的Java toString。如果您使用了一個像SeqVectorList的Scala集合,您會看到更清晰的輸出。

由於groupBy()輸出爲Map[String, Array[String]],你將不得不申請mkStringArray之前到達到地圖的價值。

這是一種方式......

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

...但它是一個小更地道(也許更容易閱讀的輸出),如果你做這種方式...

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

謝謝。這是一個非常聰明的解決方法 – Ming

1

斯卡拉嘗試是不成功的,Array[T]只是對Java的T[]表示。特別是,它們繼承了toString的Java實現,其結果類似於[[email protected]

的更常見的方法來打印數組的內容是使用mkString

scala> val nums = new Array[Int](10) 
nums: Array[Int] = [[email protected] 

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

感謝您的回答。但是,你有沒有想法如何解決我遇到的類似問題。我在原來的問題中加入了它。非常感謝 – Ming