如何使用Scala中的Set将元组转换为Map

时间:2017-09-11 07:23:59

标签: scala

这是我的第一篇文章。 我想将元组转换为使用Scala中的Set映射,如下所示。

Set((1,"a"),(2,"b"),(1,"c"))

Map(1 -> Set("a","c"), 2 -> Set("b"))

有没有办法让它变得更简单?

如果有任何遗漏信息,请告诉我。

1 个答案:

答案 0 :(得分:3)

我建议检查Scala集合库中的所有方法,它非常广泛,并且通常涵盖所有类似的常见案例。

以下是您的操作方法:

Set((1,"a"),(2,"b"),(1,"c"))
  .groupBy(_._1).mapValues(_.map(_._2))

结果:

res0: Map[Int,Set[String]] = Map(2 -> Set(b), 1 -> Set(a, c))

UPD :正如@OlegPyzhcov所指出的,mapValues创建了原始地图的惰性视图,其中每次访问时都会重新评估值。如果在创建之后重复访问映射,则这可能是低效的。要解决该问题,您可能希望最终实现地图。我认为最简单的方法是:

.mapValues(_.map(_._2)).map(identity)

@OlegPyzhcov如果有更简单/更有效的方式,请纠正我。