Scala将Map [String,Set [String]]转换为Map [(String,String),Option [Double]]

时间:2017-07-12 20:20:57

标签: scala

我在想一种方法来创建一个元组,该元组包含来自地图的String键以及Set中的每个字符串作为元组,形成新地图中的键。新地图的值将初始化为0.0。

Ex:如果我必须遵循:

Map[ USA, Set[CA, NY, WA]]

我想从中创建一个新的地图,如下所示:

Map[(USA,CA) -> 0.0, (USA,NY) -> 0.0, (USA,WA) -> 0.0]

我能够创建一个Map[String, String],但我希望能够在创建元组密钥时获得一些帮助。

2 个答案:

答案 0 :(得分:4)

Map("USA" -> Set("CA", "NY", "WA")) flatMap { case (k, set) => set.map((k, _) -> 0.0) }

答案 1 :(得分:1)

val myMap = Map("USA" -> Set("CA", "NY", "WA"))

val newMap = myMap.foldLeft(Map[(String, String), Double]()) {
  case (acc, (key, values)) => {
    acc ++ (for {
      value <- values
    } yield (key, value) -> 0.0)
  }
}