簡體   English   中英

如何在scala中將Map [Map [String,Int],Int]轉換為Map [String,Int]?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM