5

ドキュメントのリストがあり、ドキュメントにはユーザーである所有者がいます。

このリストをユーザーのマップからユーザーが所有するドキュメントのリストに変換する最もエレガントな方法は何ですか?

たとえば、私は持っています:

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

最終的に次のマップになるはずです。

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

ドキュメントからすべての一意のユーザーを取得し、それぞれのドキュメント リストをフィルタリングして、所有するものだけにする方法を考えることはできますが、固定数のパスを使用する方法があるかどうか疑問に思っていますリストが大きい場合のパフォーマンスの問題を防ぐために、リスト全体を調べます。

4

1 に答える 1

13

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)))
于 2011-12-30T03:26:34.073 に答える