【发布时间】:2021-07-23 03:59:17
【问题描述】:
我想合并列表中的多个地图。每个映射有两个键值对。
我有什么...
val input = List[Map[String, String]]
Map[a -> b, c -> d],
Map[a -> b, c -> e],
Map[a -> f, c -> h]
我想要什么...
val output = Map[String, List[String]]
Map[b -> (d, e), f -> (h)]
我已经研究过,但我能找到的最接近的是这个 (Scala: Merge maps by key),这不是我正在寻找的场景。理想情况下,我希望得到解释,而不仅仅是一行代码。我知道这可以通过 for 循环来完成,但我正在尝试学习 Scala 合并地图的方式。
编辑:在 cmets 中进行了一些讨论后,我决定稍微简化一下这个问题。键“a”和“c”是静态的/不相关的/可以硬编码。
目标是制作新地图,其中与键“a”关联的值将成为键,与键“c”关联的值将成为值。制作完所有新地图后,可以将具有相似键的地图组合在一起,并将它们的所有值放在一个列表中。
【问题讨论】:
-
为什么
f成为键,h成为值,而不是相反?Maps根据定义是无序的,因此您需要指定使用哪些规则来确定哪个值成为键以及哪个值成为值列表的成员。 -
许多 'f' 值(或 b)是重复的,因此将它们设为键更简洁。所有的“h”值(或 d/e)都是唯一的,因此可以将它们分组在一个列表中。
-
很抱歉删除评论,那是个意外。好的,我现在明白了。谢谢你的解释。
-
@Tanjin 没问题
-
我还是没看到。
d、e、f和h在示例中都是唯一的,但由于某种原因,f应该成为键,而其他的则被收集到List值中。这是什么逻辑?