我有点困在这个问题上。我觉得我在“向后思考”,这让我有点困惑。
我有一个 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.toList
和 M.fromList
将映射转换为关联对列表,然后返回。map ((,) i) xs
与 [(i,x) | x<-xs]
相同, 添加 (i,...)
到每个元素。transpose
交换列表列表中的“行”和“列”,类似于矩阵转置。
关于scala - 将列表映射拆分为映射列表的功能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46610791/