2013-07-25 41 views
6

這怎麼能映射列表,如何轉用列表值映射在斯卡拉

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

換位到主要使用從斯卡拉文庫的方法地圖的這個名單?

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

我可以編寫一個解決自己,但我更感興趣的是利用圖書館功能,所以首選的解決方案應該使用Scala庫,而其餘的緊湊和適度清晰在可能的情況。

第二個例子說明了帶有多個條目的地圖所需的轉換。

由此看來,

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") 
) 

可以假定所有的值大小相同的列表。

(可選)該解決方案可以處理值爲空列表但不是必需的情況。如果解決方案支持空列表值,則該輸入

Map (
    "a" -> List() 
) 

應導致List()

+2

更* *轉,比*拼合* –

+0

更新使用轉。 –

回答

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) 

注意,這還可以處理你的「空單」的情況下

+0

這完全符合我的要求,並通過我所有的單元測試。 –