Max*_*Max 2 collections scala scala-collections
我需要转换一个
Map[Symbol, List[A]] to a List[Map[Symbol,A]]
Run Code Online (Sandbox Code Playgroud)
但我找不到一个紧凑的代码片段(我想有一个非常紧凑的方法来实现这一点).
具体来说,我有一个
Map('a -> List("aa", "bb", "cc"),
'b -> List("dd", "ee", "ff"),
'c -> List("gg", "hh", "ii"))
Run Code Online (Sandbox Code Playgroud)
我想得到一个
List(Map('a -> "aa", 'b -> "dd", 'c -> "gg"),
(Map('a -> "bb", 'b -> "ee", 'c -> "hh"),
(Map('a -> "cc", 'b -> "ff", 'c -> "ii"))
Run Code Online (Sandbox Code Playgroud)
请注意,第一个集合中的所有列表都具有相同的大小.
有帮助吗?
scala> val m = Map('a -> List(1,2), 'b -> List(2,3,4))
m: scala.collection.immutable.Map[Symbol,List[Int]] = Map('a -> List(1, 2),
'b -> List(2, 3, 4))
scala> m.flatMap { case (k,l) => l.map(x => Map(k -> x)) }.toList
res2: List[scala.collection.immutable.Map[Symbol,Int]] =
List(Map('a -> 1), Map('a -> 2), Map('b -> 2), Map('b -> 3), Map('b -> 4))
Run Code Online (Sandbox Code Playgroud)
更新的答案:
scala> m.map {case (k,l) => l.map(x => (k,x))}.transpose.map(_.toMap).toList
res4: List[scala.collection.immutable.Map[Symbol,String]] =
List(Map('a -> aa, 'b -> dd, 'c -> gg),
Map('a -> bb, 'b -> ee, 'c -> hh),
Map('a -> cc, 'b -> ff, 'c -> ii))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |