2013-07-25 30 views
6

Làm thế nào có thể bản đồ này của danh sách,Làm thế nào để transpose một bản đồ với giá trị danh sách trong Scala

Map (
    "a" -> List(1, 2) 
) 

được hoán vào danh sách này của bản đồ chủ yếu sử dụng phương pháp từ các thư viện Scala?

List(
    Map("a" -> 1), 
    Map("a" -> 2) 
) 

Tôi có thể tự viết mã cho giải pháp để giải pháp ưa thích nên sử dụng thư viện Scala nếu có thể trong khi vẫn gọn và dễ đọc.

Ví dụ thứ hai này minh họa việc chuyển đổi bắt buộc với bản đồ có nhiều mục nhập.

Từ đó,

Map (
    10 -> List("10a", "10b", "10c"), 
    29 -> List("29a", "29b", "29c") 
) 

đó,

List(
    Map(
    10 -> "10a", 
    29 -> "29a"), 
    Map(
    10 -> "10b", 
    29 -> "29b"), 
    Map(
    10 -> "10c", 
    29 -> "29c") 
) 

Có thể giả định rằng tất cả các giá trị là danh sách các kích thước tương tự.

Tùy chọn giải pháp có thể xử lý trường hợp các giá trị là danh sách trống nhưng không bắt buộc. Nếu giải pháp hỗ trợ giá trị danh sách trống thì đầu vào này,

Map (
    "a" -> List() 
) 

nên dẫn đến List().

+2

Nó là nhiều hơn nữa * transpose *, hơn * flatten * –

+0

cập nhật để sử dụng chuyển vị. –

Trả lời

9
val m = Map (
    10 -> List("10a", "10b", "10c"), 
    29 -> List("29a", "29b", "29c") 
) 

m.map{ case (k, vs) => 
    vs.map(k -> _) 
}.toList.transpose.map(_.toMap) 

Lưu ý rằng điều này cũng xử lý của bạn "danh sách trống" trường hợp

+0

Điều này phù hợp với yêu cầu của tôi một cách hoàn hảo và vượt qua tất cả các bài kiểm tra đơn vị của tôi. –