如何在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()
。
【问题讨论】:
它比 flatten 更 transpose 更新为使用转置。 【参考方案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 - 如何根据另一列中的唯一值转置一列中的单元格?
如何将行数据转置/旋转到 Spark Scala 中的列? [复制]