【问题标题】:Transform list in to map of element -> list(element) in scala将列表转换为元素的映射 - > scala中的列表(元素)
【发布时间】:2011-12-30 03:17:52
【问题描述】:

我有一个文档列表,其中文档的所有者是用户。

将此列表转换为用户映射到他们拥有的文档列表的最优雅的方法是什么?

例如我有:

"doc1" owned by user "John"
"doc2" owned by user "Frank"
"doc3" owned by user "John"

我最终应该得到一张地图:

"John" -> List("doc1", "doc3"), "Frank" -> List("doc2")

我可以想到一种方法,即从文档中获取所有唯一用户,并为每个用户过滤文档列表以使其成为他们拥有的用户,但我想知道是否有一种方法可以使用固定的通过列表的次数,以防止列表很大时出现任何性能问题。

【问题讨论】:

    标签: scala collections higher-order-functions


    【解决方案1】:

    使用 groupBy:

    scala> case class Doc(id: String, owner: String)
    defined class Doc
    
    scala> List(Doc("doc1", "John"), Doc("doc2", "Frank"), Doc("doc3", "John"))
    res0: List[Doc] = List(Doc(doc1,John), Doc(doc2,Frank), Doc(doc3,John))
    
    scala> res0.groupBy(_.owner)
    res1: scala.collection.immutable.Map[String,List[Doc]] = Map(
      Frank -> List(Doc(doc2,Frank)), John -> List(Doc(doc1,John), Doc(doc3,John)))
    

    【讨论】:

      猜你喜欢
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多