【问题标题】:Scala: How to create a map over a collection from a set of keys?Scala:如何在一组键的集合上创建映射?
【发布时间】:2016-03-29 06:51:31
【问题描述】:

假设我有一组人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 当然会忽略所有没有人的年龄。我应该如何实现这个?

【问题讨论】:

    标签: scala dictionary


    【解决方案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`.
    

    【讨论】:

      【解决方案2】:

      由于您的地图不包含与年龄对应的空序列,因此您可以用空集合填充其余部分:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-21
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        相关资源
        最近更新 更多