scala - 将列表映射拆分为映射列表的功能方法

标签 scala haskell functional-programming ocaml

我有点困在这个问题上。我觉得我在“向后思考”,这让我有点困惑。

我有一个 Map[Long, Seq[String]]我想将其转换为 Seq[Map[Long, String]] .走向另一个方向相当简单,因为我们可以将元素组合在一起,但是,我不确定如何以功能方式将其分开。

所以,

val x = Map(1 -> List("a","b","c"), 2 -> List("d", "e"), 3 -> List("f"))

应该成为
List(Map(1 -> "a", 2 -> "d", 3 -> "f"), Map(1 -> "b", 2 -> "e"), Map(1 -> "c"))

我正在考虑使用 x.partition然后在每个结果元组上递归,但我不确定我会在什么上分区:/

我正在用 Scala 写作,但欢迎任何功能性答案(与语言无关)。

最佳答案

在 haskell :

> import qualified Data.Map as M
> import Data.List
> m = M.fromList [(1,["a","b","c"]), (2,["d","e"]), (3,["f"])]
> map M.fromList . transpose . map (\(i,xs) -> map ((,) i) xs) . M.toList $ m
[fromList [(1,"a"),(2,"d"),(3,"f")],fromList [(1,"b"),(2,"e")],fromList [(1,"c")]]
M.toListM.fromList将映射转换为关联对列表,然后返回。
map ((,) i) xs[(i,x) | x<-xs] 相同, 添加 (i,...)到每个元素。
transpose交换列表列表中的“行”和“列”,类似于矩阵转置。

关于scala - 将列表映射拆分为映射列表的功能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46610791/

相关文章:

Scala 的 "partial functions"' 和 F# 中的 ".orElse"方法的概念

java - 更新 Java 类/play2 中的 View 参数

scala - 与 Option.isEmpty 和 Option.get 相比,使用 Option.map 有什么优势?

haskell - 使 (a, a) 成为仿函数

list - Haskell 范围表示法生成列表。意外输出

functional-programming - 如何在OCaml中返回for循环的索引?

scala - 在集合类型中对当前极值进行评分的最佳方法

parsing - 如何在 Parsec ParserT monad 中表达解析逻辑

scala - Scala map/foreach 中的下划线

scala - Doobie for Scala/Play 框架中的事务