如何在scala中反转地图?

pat*_*rit 3 scala scala-collections

什么是从反转最短/惯用的方式Map[K, V],以Map[V, Iterable[K]]在Scala呢?

Mil*_*bin 7

使用mapValues可以简化Marius的解决方案,

m.groupBy(_._2).mapValues(_.map(_._1))
Run Code Online (Sandbox Code Playgroud)

示例REPL会话,

scala> val m = Map(1 -> "foo", 2 -> "foo", 3 -> "bar", 4 -> "bar", 5 -> "baz")
m: Map[Int,String] = Map(5 -> baz, 1 -> foo, 2 -> foo, 3 -> bar, 4 -> bar)

scala> m.groupBy(_._2).mapValues(_.map(_._1))
res0: Map[String, Iterable[Int]] = Map(baz -> List(5), foo -> List(1, 2), bar -> List(3, 4))
Run Code Online (Sandbox Code Playgroud)