scala - 反转 Map 最简洁的 Scala 方法是什么?

标签 scala scala-2.8 scala-collections

反转 Map 最简洁的 Scala 方法是什么? map 可能包含非唯一值。

编辑:

Map[A, B] 的反转应该给出 Map[B, Set[A]] (或者 MultiMap,那会更好)。

最佳答案

如果您可能丢失重复的 key :

scala> val map = Map(1->"one", 2->"two", -2->"two")
map: scala.collection.immutable.Map[Int,java.lang.String] = Map((1,one), (2,two), (-2,two))

scala> map.map(_ swap)
res0: scala.collection.immutable.Map[java.lang.String,Int] = Map((one,1), (two,-2))

如果您不想作为多重 map 进行访问,而只想作为集合的 map 进行访问,则:

scala> map.groupBy(_._2).mapValues(_.keys.toSet)
res1: scala.collection.immutable.Map[
  java.lang.String,scala.collection.immutable.Set[Int]
] = Map((one,Set(1)), (two,Set(2, -2)))

如果您坚持要获取MultiMap,那么:

scala> import scala.collection.mutable.{HashMap, Set, MultiMap}
scala> ( (new HashMap[String,Set[Int]] with MultiMap[String,Int]) ++=
     |          map.groupBy(_._2).mapValues(Set[Int]() ++= _.keys) )
res2: scala.collection.mutable.HashMap[String,scala.collection.mutable.Set[Int]]
with scala.collection.mutable.MultiMap[String,Int] = Map((one,Set(1)), (two,Set(-2, 2)))

关于scala - 反转 Map 最简洁的 Scala 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678970/

相关文章:

scala - 将scala-compiler.jar添加为运行时依赖项

scala - Hadoop与Spark不匹配的问题?

scala - 如何使用特征 scala.Proxy

scala - 将新的 Iterable{} 代码从 Scala 2.7.7 移植到 2.8

reflection - 使用反射调用 Scala 构造函数的参数数量错误

scala - 具有保留类型的序列的任一到任一的通用序列

scala - Spark RDD 相当于 Scala 集合分区

scala - 如何找到两个数组列之间的共同元素?

scala - 平面 Actor 树

scala - 在scala中压缩不等长列表