假设我有Map
喜欢
val x = Map(1 -> List("a", "b"), 2 -> List("a"),
3 -> List("a", "b"), 4 -> List("a"),
5 -> List("c"))
我如何从中创建一个新的Map
,其中List
的密钥来自x
具有相同值的密钥,例如,我该如何实现
def someFunction(m: Map[Int, List[String]]): Map[List[Int], List[String]] =
// stuff that would turn x into
// Map(List(1, 3) -> List("a", "b"), List(2, 4) -> List("a"), List(5) -> List("c"))
答案 0 :(得分:3)
您可以将Map转换为List,然后使用groupBy
聚合每个元组的第一个元素:
x.toList.groupBy(_._2).mapValues(_.map(_._1)).map{ case (x, y) => (y, x) }
// res37: scala.collection.immutable.Map[List[Int],List[String]] =
// Map(List(2, 4) -> List(a), List(1, 3) -> List(a, b), List(5) -> List(c))
或者@Dylan评论说,使用_.swap
切换元组'元素:
x.toList.groupBy(_._2).mapValues(_.map(_._1)).map(_.swap)