在 F# 中,如何合并 2 个 Collections.Map 实例?
我正在尝试合并两个地图,但没有用于加入集合的内置方法。那么你该怎么做呢?
I am trying to merge two Maps, but there is no built in method for joining Collections. So how do you do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用 Map.fold 和 Map.add 来实现此操作,因为 add 实际上是添加/替换:
未提供开箱即用的合并功能的原因可能是您需要处理键冲突。在这个简单的合并算法中,我们简单地从第二个映射中获取键值对,这可能不是您想要的行为。
You can implement this using Map.fold and Map.add, since add is actually add/replace:
Probably the reason merge isn't provided out of the box is that you need to deal with key conflicts. In this simple merge algorithm we simple take the key value pair from the second map, this may not be the behaviour you want.
另一种方法是:
如果存在重复键,它可以让您决定想要什么值。
示例:
请注意键
3
是不同的。An alternative way is this:
It lets you decide on what value you want if there is duplicate keys.
Example:
Notice that the key
3
is different.定义以下函数:
示例:
和结果:
Define the following function:
example:
and the result:
如果您更喜欢使用函数组合,您可以定义一个
join
函数,如下所示:鉴于
m1
和m2
是 Map,您可以像这样使用它:一些警告:
m2
中的键将覆盖m1
中的键If you prefer using function composition you could define a
join
function like this:Given that
m1
andm2
are Maps you would then use it like this:Some caveats:
m2
will overwrite those inm1