scala通过遍历地图构建字符串

use*_*980 10 scala

如果我有一个地图并希望通过迭代来构建一个字符串,有没有办法让最终字符串成为表达式的结果而不是定义一个变量并在循环中修改它?

而不是这个

val myMap = Map("1" -> "2", "3"->"4") 
var s = ""
myMap foreach s += ...
Run Code Online (Sandbox Code Playgroud)

我宁愿它

var s = myMap something ...
Run Code Online (Sandbox Code Playgroud)

Dan*_*ral 18

我只是mapmkString.例如:

val s = (
    Map("1" -> "2", "3"->"4") 
    map { case (key, value) => "Key: %s\nValue: %s" format (key, value) } 
    mkString ("", "\n", "\n")
)
Run Code Online (Sandbox Code Playgroud)


Kev*_*ght 13

至于丹尼尔的答案,但有一些优化和我自己的格式偏好:

val myMap = Map("1" -> "2", "3"->"4")
val s = myMap.view map {
  case (key, value) => "Key: " + key + "\nValue: " + value
} mkString ("", "\n", "\n")
Run Code Online (Sandbox Code Playgroud)

优化:

  1. 首先创建一个view地图,我避免创建一个中间集合
  2. 在分析时,直接字符串连接比快 String.format


Ben*_*mes 7

你可以用折叠来做到这一点:

scala> myMap.foldLeft("") { (s: String, pair: (String, String)) =>
     |   s + pair._1 + pair._2
     | }
res0: java.lang.String = 1234
Run Code Online (Sandbox Code Playgroud)