我在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)
}
当我在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)
答案 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
。如果您使用的是Seq
,Vector
或List
等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)