dictionary - Elm:如何合并两个字典?
问题描述
我有两本字典,它们的值表明了神奇宝贝攻击的类型有效性。现在我想将这些结合起来以产生综合效果。
例如,一本字典有:
normal -> 0.5
fire -> 2
另一个有:
water-> 0.5
fire -> 2
合并后将是:
normal -> 0.5
water-> 0.5
fire -> 4
我找到了一个名为 dict 的函数merge
:https ://package.elm-lang.org/packages/elm/core/1.0.2/Dict#merge ,但不知道如何使用它,也找不到例子。
那么,你如何使用 Dict.merge 呢?你能举个例子吗?
解决方案
签名可能会让您感到困惑,因为它不限于合并到一个新的Dict
,而是可以合并到一个键值对列表中,例如。在阅读您的情况下的签名时,您可以替换result
为Dict comparable c
. 甚至可以Int
同时使用a
,b
和c
.
编辑:为了方便参考,签名是:
merge :
(comparable -> a -> result -> result)
-> (comparable -> a -> b -> result -> result)
-> (comparable -> b -> result -> result)
-> Dict comparable a
-> Dict comparable b
-> result
-> result
使用它时,为了返回一个新的Dict
,我们必须将它Dict.empty
作为初始值传递,并自己将值插入每个函数的字典中,如下所示:
dictA =
Dict.fromList [ ( "normal", 0.5 ), ( "fire", 2 ) ]
dictB =
Dict.fromList [ ( "water", 0.5 ), ( "fire", 2 ) ]
merged =
Dict.merge
(\key a -> Dict.insert key a)
(\key a b -> Dict.insert key (a + b))
(\key b -> Dict.insert key b)
dictA
dictB
Dict.empty
推荐阅读
- spring-cloud-task - 如何从外部应用程序触发 Spring Cloud 任务?
- json - Swift 从 JSON 请求生成通用函数
- react-admin - 在 react-admin 中编辑嵌套 protobuf 字段的最佳方法?
- apache - apache2反向代理配置
- android - 对象是如何创建的?
- ruby - 在`main`对象上调用RSpec测试方法
- mysql - 使用 javadriver 将 Matlab 连接到没有数据库工具箱的 MY SQL 数据库
- c# - 如何验证贝宝付款是否真实 C#
- .net - .Net 中的集成测试,用于两个微服务之间的 rest api
- c# - 如何在按钮悬停时在面板周围绘制边框?