例如。 Map[Map[String,Int],Int]
我需要将其转换为Map[String,Int]
,即将内部映射的Int值替换为外部映射的Int值替换。
例如:
val innerMap = Map("a"->1)
val outerMap = Map(innerMap, 2)
必填结果:
resultMap = Map("a"->2)
答案 0 :(得分:3)
即使您还没有回答关于重复的String
值的问题,我也会猜测您想要的是这样的东西。
val mmsii :Map[Map[String,Int],Int] =
Map(Map("a"->1)->11,Map("b"->2)->22)
mmsii.flatMap{case (m,v) => m.keys.map(_ -> v)}
或者,使用有时更友好的for
理解:
for {
(m,v) <- mmsii
(k,_) <- m
} yield k->v
请记住,如果有重复的String
键,那么将仅保留一对String->Int
对,而其他将丢失。
答案 1 :(得分:0)
您可以利用此解决方案来解决问题
val anotherMap = Map(Map("a" -> 1) -> 10, Map("b" -> 2) -> 11, Map("c" -> 3) -> 12)
anotherMap.flatMap {
case (keyMap, value) =>
keyMap map {
case (k, _) => Map(k -> value)
}
}
// res0: scala.collection.immutable.Iterable[scala.collection.immutable.Map[String,Int]] = List(Map(a -> 10), Map(b -> 11), Map(c -> 12))
答案 2 :(得分:0)
与 @jwvh 的解决方案几乎相同,只是显式
val nestedMap: Map[Map[String, Int], Int] = Map(
Map("k1" -> 1) -> 11,
Map("k2" -> 2, "k3" -> 3) -> 22
)
val unnestedMap: Map[String, Int] = nestedMap.flatMap { (outerTuple: (Map[String, Int], Int)) =>
val innerMap: Map[String, Int] = outerTuple._1
val commonVal: Int = outerTuple._2
innerMap.map { (innerTuple: (String, Int)) =>
(innerTuple._1 -> commonVal)
}
}
print(unnestedMap)