加入3个地图(2个主地图,1个结果地图),以将组合键映射到结果地图中以具有来自主地图的值

时间:2018-07-13 09:34:04

标签: scala dictionary join mapping scala-collections

我有一张包含一些主数据(id->描述)的地图: val map1:Map [String,String] = Map(“ 001”->“ ABCD”,“ 002”->“ MNOP”,“ 003”->“ WXYZ”)

我还有另一个包含其他主数据(id->描述)的地图: val map2:Map [String,String] = Map(“ 100”->“ Ref1”,“ 200”->“ Ref2”,“ 300”->“ Ref3”)

我有一个如下的结果图,它是从某些数据集衍生而来的,该数据集屈服了以下图,其中map1和map2的id结合使用来确定键,准确地说,是从id分组中得出的图从以上两个地图中,然后累计金额:

val map3:Map [(String,String),Double] = Map((“ 001”,“ 200”)-> 3452.30,(“ 003”,“ 300”)-> 78484.33,(“ 002”, “ 777”)-> 893.45)

我需要在Map中输出如下: (“ ABCD”,“ Ref2”)-> 3452.30,(“ WXYZ”,“ Ref3”)-> 78484.33,(“ MNOP”,“ 777”)-> 893.45)

我一直在尝试:

val map5 = map3.map(obj => {
  (map1 getOrElse(obj._1._1, "noMatchMap1"))
  (map2 getOrElse(obj._1._2, "noMatchMap2"))
} match {
  case "noMatchMap1" => obj
  case "noMatchMap2" => obj
  case value => value -> obj._2
})

1 个答案:

答案 0 :(得分:1)

应该是这样:

map3.map{
    case((key1, key2), d) => ((map1.getOrElse(key1, key1), map2.getOrElse(key2, key2)),d)
  }

顺便说一句,我邀请您向https://stackoverflow.com/help/how-to-ask咨询有关如何提出好的问题,尤其是请提供您尝试过的内容。我很乐意为您提供帮助,但这不是您可以转储作业/完成工作的网站:-D