按键合并不同的地图
Merge different Map by keys
我如何通过键快速合并两个地图,但它们可以有不同的键。
例如我有
val query1 = Map(("email", "aa@ya.ru"), ("phone", "ph0997832"))
val query2 = Map(("email", "bb@ya.ru"), ("fax", "fax0997832"))
我想要这样的东西:
List("email", "phone", "fax")
List(List("aa@ya.ru", "ph0997832", ""), List("bb@ya.ru", "", "fax0997832"))
使用:
scala> val queries = List(query1, query2)
queries: List[Map[String,String]] = List(
Map(email -> aa@ya.ru, phone -> ph0997832),
Map(email -> bb@ya.ru, fax -> fax0997832)
)
拿到钥匙很容易;在每个 Map
上调用 .keys
,展平结果并删除重复项:
scala> val keys = queries.flatMap(_.keys).distinct
keys: List[String] = List(email, phone, fax)
获取第二个列表;获取查询的所有键的值,使用 .getOrElse(k, "")
获取空字符串而不是 None
:
scala> queries.map(q => keys.map(k => q.getOrElse(k, "")))
res0: List[List[String]] = List(List(aa@ya.ru, ph0997832, ""),
List(bb@ya.ru, "", fax0997832))
我如何通过键快速合并两个地图,但它们可以有不同的键。 例如我有
val query1 = Map(("email", "aa@ya.ru"), ("phone", "ph0997832"))
val query2 = Map(("email", "bb@ya.ru"), ("fax", "fax0997832"))
我想要这样的东西:
List("email", "phone", "fax")
List(List("aa@ya.ru", "ph0997832", ""), List("bb@ya.ru", "", "fax0997832"))
使用:
scala> val queries = List(query1, query2)
queries: List[Map[String,String]] = List(
Map(email -> aa@ya.ru, phone -> ph0997832),
Map(email -> bb@ya.ru, fax -> fax0997832)
)
拿到钥匙很容易;在每个 Map
上调用 .keys
,展平结果并删除重复项:
scala> val keys = queries.flatMap(_.keys).distinct
keys: List[String] = List(email, phone, fax)
获取第二个列表;获取查询的所有键的值,使用 .getOrElse(k, "")
获取空字符串而不是 None
:
scala> queries.map(q => keys.map(k => q.getOrElse(k, "")))
res0: List[List[String]] = List(List(aa@ya.ru, ph0997832, ""),
List(bb@ya.ru, "", fax0997832))