Scala将映射k->(v1,v2)转换为单个键值对

时间:2018-10-18 08:54:07

标签: scala dictionary keyvaluepair

如何执行以下操作?

将地图K1->(v1,v2), K2->(v1,v2)转换为K1->v1,K1->v2,K2->v1,K2->V2

2 个答案:

答案 0 :(得分:1)

要从Map[String,(String, String)]转到List[Map[String,String]]

val mss = Map("s"->("a","b"), "t"->("a","c"))

mss.toList.flatMap{case (k,(a,b)) => List((k,a),(k,b))}.map(Map(_))

将每个结果元组转换为Map的最后一步是毫无意义的。 Map只有一个键->值对的用途是什么?

答案 1 :(得分:0)

您应该首先将Map转换为List或转换为Seq(如果需要更通用的类型),然后可以使用flatMaptoList的示例:

val map = Map("a" -> ("1", "2"), "b" -> ("3", "4"))

map.toList.flatMap {
  case (k, (v1, v2)) => List(k -> v1, k -> v2)
}
// res0: List[(String, String)] = List((a,1), (a,2), (b,3), (b,4))

首先,您的值映射到元组列表中,因此中间结果将是:

List(List((a,1), (a,2)), List((b,3), (b,4)))

然后它变平,您会得到元组列表:

List((a,1), (a,2), (b,3), (b,4))