[英]Convert List[Map[String,Map[String,Int]]] to Map[Int,Int] in Scala
[英]How to convert Map[Map[String,Int],Int] into Map[String,Int] in scala?
例如。 Map[Map[String,Int],Int]
我需要將其轉換為Map[String,Int]
即內部地圖的值部分的Int替換為外部地圖的值部分的Int。
例如:
val innerMap = Map("a"->1)
val outerMap = Map(innerMap, 2)
所需結果:
resultMap = Map("a"->2)
即使您尚未回答有關重復的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
對,而其他對則丟失。
您可以利用此解決方案解決問題
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))
與@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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.