如何在Scala中用列表值转置地图

Posted

技术标签:

【中文标题】如何在Scala中用列表值转置地图【英文标题】:How to transpose a map with list values in Scala 【发布时间】:2013-07-25 00:56:55 【问题描述】:

这地图怎么能列出来,

Map (
   "a" -> List(1, 2)
)

主要使用 Scala 库中的方法转换到此映射列表?

List(
  Map("a" -> 1),
  Map("a" -> 2)
)

我可以自己编写解决方案,但我对使用库功能更感兴趣,因此首选解决方案应尽可能使用 Scala 库,同时保持紧凑和适度易读。

第二个示例使用包含多个条目的映射说明了所需的转换。

从这里,

Map (
   10 -> List("10a", "10b", "10c"),
   29 -> List("29a", "29b", "29c")
)

到这里,

List(
  Map(
    10 -> "10a",
    29 -> "29a"),
  Map(
    10 -> "10b",
    29 -> "29b"),
  Map(
    10 -> "10c",
    29 -> "29c")
)

可以假设所有值都是相同大小的列表。

该解决方案可以选择处理值是空列表但不是必需的情况。如果解决方案支持空列表值,那么这个输入,

Map (
   "a" -> List()
)

应该是List()

【问题讨论】:

它比 flattentranspose 更新为使用转置。 【参考方案1】:
val m = Map (
   10 -> List("10a", "10b", "10c"),
   29 -> List("29a", "29b", "29c")
)

m.map case (k, vs) =>
  vs.map(k -> _)
.toList.transpose.map(_.toMap)

请注意,这也处理您的“空列表”情况

【讨论】:

这完全符合我的要求并通过了我所有的单元测试。

以上是关于如何在Scala中用列表值转置地图的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 如何根据另一列中的唯一值转置一列中的单元格?

如何在Scala中访问嵌套映射中的键值

Scala:如何合并地图集合

如何将行数据转置/旋转到 Spark Scala 中的列? [复制]

如何使用scala在Apache spark中用空字符串(“”)替换空值[重复]

如何在idea中用maven配置spark和scala