2016-11-15 22 views
0

私はIntelliJワークシートでこのスカラーコードを実行しています。スカラワークシート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

私はScalaのREPLに助け

付加的な問題のため

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

感謝を実行する代わりに、ときに私はこれを期待していたが取得しています

e6e9c3 @;上記のコードで

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 

、以下の

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(" ")) 
} 

結果がどのように私は結果ではなく、java.lang.Stringで文字列を印刷するように得ることができます。 Scalaでprintln(words.groupBy(_.substring(0, 1)).mkString)

答えて

1

あなたの第二の質問への答えはずっと第一の答えのようなものです。問題は、醜いJava toStringを実装しているArrayを使用していることです。 Seq,Vector、またはListのようなScalaコレクションを使用した場合は、よりクリーンな出力が得られます。

groupBy()出力がMap[String, Array[String]]ですので、あなたはArraymkStringを適用する前に、マップの値に到達する必要があるとしています。

これは...

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

一つの方法です...しかし、あなたはこのようにそれを行う場合、それはもう少し慣用的な(と出力を読み、おそらく簡単に)だ...

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

ありがとうございます。それはかなりスマートな回避策です – Ming

1

と試みたとき が失敗した、Array[T]は、javaのT[]のためだけの表現です。特に、Javaの実装であるtoStringを継承しており、その結果は[[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

関連する問題