2011-12-30 51 views
5

Tôi có một danh sách tài liệu, trong đó Tài liệu có chủ sở hữu là Người dùng.Danh sách chuyển đổi vào bản đồ của phần tử -> danh sách (phần tử) trong scala

Cách thanh lịch nhất để chuyển danh sách này thành Bản đồ người dùng thành Danh sách tài liệu mà họ sở hữu là gì?

Vì vậy, ví dụ tôi có:

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

tôi nên kết thúc với bản đồ về:

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

tôi có thể nghĩ ra một cách mà sẽ được lấy tất cả người dùng độc đáo từ các văn bản và cho mỗi người trong số họ lọc danh sách tài liệu để chỉ là những người họ sở hữu, nhưng tôi tự hỏi nếu có một cách sử dụng một số cố định đi qua danh sách để ngăn chặn bất kỳ vấn đề hiệu suất nếu danh sách là lớn.

Trả lời

13

Sử dụng nhómBởi:

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))) 
Các vấn đề liên quan