加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

什么是最简洁的Scala方式来反转地图?

发布时间:2020-12-16 08:53:46 所属栏目:安全 来源:网络整理
导读:什么是最简洁的 Scala方式来反转地图?地图可能包含非唯一值. 编辑: Map [A??,B]的反转应该给Map [B,Set [A]](或MultiMap,甚至更好). 解决方法 如果您丢失重复的密钥: scala val map = Map(1-"one",2-"two",-2-"two")map: scala.collection.immutable.Map[
什么是最简洁的 Scala方式来反转地图?地图可能包含非唯一值.

编辑:

Map [A??,B]的反转应该给Map [B,Set [A]](或MultiMap,甚至更好).

解决方法

如果您丢失重复的密钥:

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))

如果您不希望以多地图形式进行访问,只需要设置地图,那么:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读