mis*_*tor 7 scala scala-2.8 scala-collections
什么是最简洁的Scala方式来反转地图?地图可能包含非唯一值.
编辑:
逆转 Map[A, B]
应该给Map[B, Set[A]]
(或者一个MultiMap,那会更好).
Rex*_*err 24
如果您丢失了重复的密钥:
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))
Run Code Online (Sandbox Code Playgroud)
如果您不希望以多重映射形式进行访问,只需要设置映射,那么:
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)))
Run Code Online (Sandbox Code Playgroud)
如果你坚持要求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)))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3360 次 |
最近记录: |