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

问题描述 投票:-8回答:2

如何执行以下操作?

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

scala dictionary keyvaluepair
2个回答
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的最后一步是毫无意义的。只使用一个key-> value对的Map有什么用?


0
投票

你应该首先将你的Map转换为ListSeq(如果你想要更通用的类型)然后你可以使用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))

© www.soinside.com 2019 - 2024. All rights reserved.