如何将元组映射映射到Scala中的映射元组?

Iva*_*van 4 mapping collections scala

val a: Map[String, (Int, Int)] = Map("a" -> (1, 10), "b" -> (2, 20))
Run Code Online (Sandbox Code Playgroud)

什么是正确的Scala派生方式

val b: (Map[String, Int], Map[String, Int]) = (Map("a" -> 1, "b" -> 2), Map("a" -> 10, "b" -> 20))
Run Code Online (Sandbox Code Playgroud)

来自a

Sea*_*ons 13

scala> val b = (a.mapValues(_._1), a.mapValues(_._2))
b: (scala.collection.immutable.Map[String,Int], scala.collection.immutable.Map[String,Int]) = (Map(a -> 1, b -> 2),Map(a -> 10, b -> 20))
Run Code Online (Sandbox Code Playgroud)

  • 我说简单.:) (2认同)

rom*_*usz 6

我喜欢Sean的答案,但是如果你想要,由于某种原因只能遍历你的地图一次并且不想使用Scalaz,这是另一个解决方案:

a.foldLeft((Map.empty[String, Int], Map.empty[String, Int])) {
  case ((a1, a2), (k, (v1, v2))) => (a1 + (k -> v1), a2 + (k -> v2))
}
Run Code Online (Sandbox Code Playgroud)