我有两个字典,它们的值包括神奇宝贝攻击的类型有效性。现在,我想将它们结合起来以产生综合效果。
例如,一本字典具有:
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?你能举个例子吗?
答案 0 :(得分:10)
签名可能使您感到困惑,因为它不限于合并到新的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