反转 Map 的最简洁的 Scala 方法是什么? [英] What is the most succinct Scala way to reverse a Map?
本文介绍了反转 Map 的最简洁的 Scala 方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
反转 Map 的最简洁的 Scala 方法是什么?地图可能包含非唯一值.
What is the most succinct Scala way to reverse a Map? The Map may contain non-unique values.
Map[A, B]
的反转应该给 Map[B, Set[A]]
(或者一个 MultiMap,那会更好).
The reversal of Map[A, B]
should give Map[B, Set[A]]
(or a MultiMap, that would be even better).
推荐答案
如果您可能会丢失重复键:
If you can lose duplicate keys:
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))
如果您不想以多图的形式访问,只需要一个到集合的映射,那么:
If you don't want access as a multimap, just a map to sets, then:
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
,那么:
If you insist on getting a MultiMap
, then:
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)))
这篇关于反转 Map 的最简洁的 Scala 方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文