【问题标题】:Join 3 maps (2 master map, 1 resultant map), to map the composite key in the resultant map to have values from the master maps加入 3 个映射(2 个主映射,1 个结果映射),将结果映射中的复合键映射到主映射中的值
【发布时间】:2018-12-21 15:42:50
【问题描述】:

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

我有另一个包含一些其他主数据的地图(id->description): 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
})

【问题讨论】:

    标签: scala dictionary join mapping scala-collections


    【解决方案1】:

    应该是这样的:

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

    顺便说一句,我邀请您咨询https://stackoverflow.com/help/how-to-ask 以了解如何提出好的问题,特别是请包括您尝试过的内容。我很乐意为您提供帮助,但这不是一个您可以丢弃您的家庭作业/工作并完成它的网站:-D

    【讨论】:

    • 酷!这就像一个魅力,我试图用不同的方法解决并被卡住了!非常感谢!
    • 你已经不远了,getOrElse(key1, key1) 的小技巧只是让它比使用“noMatchMap”进行间接更简单:-) 干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 2021-10-28
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多