Scala:如何从一组键创建集合上的映射?

时间:2016-03-29 06:51:31

标签: scala dictionary

说我有一组人Set[People]。每个人都有一个年龄。我想创建一个函数,它创建一个Map[Int, Seq[People]],其中对于每个年龄,例如0到100,如果没有那个年龄的人,那么将会有一个具有该年龄的人序列或空序列原始系列。

即。我正在做一些事情

Set[People].groupBy(_.age)

输出

Map[Int, Seq[People]](0 -> Seq[John,Mary], 1-> Seq[People](), 2 -> Seq[People](Bill)...

groupBy当然会省略所有没有人的年龄。我该如何实现呢?

2 个答案:

答案 0 :(得分:1)

为地图配置默认值:

val grouped = people.groupBy(_.age).withDefaultValue(Set())

如果您需要将值作为序列,则可以映射它们

val grouped = people.groupBy(_.age).mapValues(_.toSeq).withDefaultValue(Seq())

请记住,正如文档所说:

Note: `get`, `contains`, `iterator`, `keys`, etc are not affected by `withDefault`.

答案 1 :(得分:0)

由于您的地图上没有与年龄相对应的空序列,因此可以使用空集合填充其余部分:

val fullMap = (0 to 100).map (index => index -> map.getOrElse(index, None)).toMap