2013-07-25 42 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

这完全符合我的要求,并通过我所有的单元测试。 –