我有两个列表:dec_tyres
和jan_tyres
:
scala> dec_tyres
res21: List[(String, Int)] = List((007139::21,10), .....
scala> jan_tyres
res22: List[(String, Int)] = List((005179::24,2), .....
scala> dec_tyres.length
res19: Int = 71
scala> jan_tyres.length
res20: Int = 82
现在加入这些我正在做的事情:
val mb = jan_tyres.toMap
val tyres_count = dec_tyres.flatMap{case (ka,va) => mb.get(ka).map(vb => (ka,va,vb))}.toList
这给了我:
scala> tyres_count
res23: List[(String, Int, Int)] = List((007139::21,10,8), .....
scala> tyres_count.length
res24: Int = 53
这是计算一个内连接,只给我53条记录,我期待100条记录。
将抓取dec_tyres
和jan_tyres
都没有公用密钥的所有记录。相反,我希望该记录使用特定键而不是零作为相应的值。
因此,解决方案是“全面加入”,我真的很挣扎。
答案 0 :(得分:1)
您希望两个(String, Int, Int)
输入列表中的每个唯一String
获得(String, Int)
个结果吗?
val janMap = jan_tyres.toMap // for fast lookup
val decMap = dec_tyres.toMap
val tyres_count = (jan_tyres ++ dec_tyres).map(_._1).distinct.map{ k =>
(k, decMap.getOrElse(k, 0), janMap.getOrElse(k, 0))
}
合并列表(++
),仅保留关键字符串(map(_._1)
),删除重复项(distinct
),将每个键(k
)更改为元组使用Map
来检索Int
值(map{...}
)。