scala foldLeft和地图地图

scala foldLeft和地图地图,scala,Scala,我有一张像这样的地图 val v=Map(“A”->Map(“C”->“D”,“F”->“G”),“B”->Map(“C”->“E”,“M”->“N”) 我必须创建一个新的地图,它将有一系列的价值地图和它们的父母,所以我的结果地图看起来像 Map(“C”->List(“A”->Map(“C”->D”,“F”->G”),“B”->Map(“C”->E”,“M”->N”),“F”->List(“A”->Map(“C”->D”,“F”->G”),“M”->List(“B”->Map(“C”->E”,“

我有一张像这样的地图

val v=Map(“A”->Map(“C”->“D”,“F”->“G”),“B”->Map(“C”->“E”,“M”->“N”)

我必须创建一个新的地图,它将有一系列的价值地图和它们的父母,所以我的结果地图看起来像

Map(“C”->List(“A”->Map(“C”->D”,“F”->G”),“B”->Map(“C”->E”,“M”->N”),“F”->List(“A”->Map(“C”->D”,“F”->G”),“M”->List(“B”->Map(“C”->E”,“M”->N”)


foldleft能做到这一点吗?我知道这让人困惑,但我们将感谢您的帮助。

是的,可以用
foldleft
完成

我不知道为什么会有列表,因为每个
列表
都有一个
映射
作为一个元素。不是更多,不是更少

无论如何

我使用折叠
(它们是
v
的映射),这样我可以更快地访问那些映射的
。我扔掉所有
,它们已经在
acc
中,所以不会有任何重复计算。(
元素键.过滤器(!acc.isDefinedAt())

然后,对于尚未在结果中的每个
,遍历原始
v
,并查看它作为
键出现在值映射中的位置。(
v.filter{case(k,map)=>map.isDefinedAt(key)})

然后将过滤后的地图放入列表中,并将其与相应的键一起添加到
acc

旁注:地图的地图、值的键、键、值…我不知道如何更好地解释这一点而不让自己感到困惑…我甚至不知道应该突出显示什么

val v = Map("A" -> Map("C" -> "D", "F" -> "G"), "B" -> Map("C" -> "E", "M" -> "N"))

val result = v.values.foldLeft(Map.empty[String, List[Map[String, Map[String, String]]]])((acc, elem) => {
 val nextEntries = elem.keys.filter(!acc.isDefinedAt(_)).map(key => 
   key -> List(v.filter{case (k, map) => map.isDefinedAt(key)}))
 acc ++ nextEntries
})

println(result) //Map(C -> List(Map(A -> Map(C -> D, F -> G), B -> Map(C -> E, M -> N))), F -> List(Map(A -> Map(C -> D, F -> G))), M -> List(Map(B -> Map(C -> E, M -> N))))