这是我的第一篇文章。 我想将元组转换为使用Scala中的Set映射,如下所示。
Set((1,"a"),(2,"b"),(1,"c"))
↓
Map(1 -> Set("a","c"), 2 -> Set("b"))
有没有办法让它变得更简单?
如果有任何遗漏信息,请告诉我。
答案 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如果有更简单/更有效的方式,请纠正我。