首页 > 解决方案 > Elm:如何合并两个字典?

问题描述

我有两本字典,它们的值表明了神奇宝贝攻击的类型有效性。现在我想将这些结合起来以产生综合效果。

例如,一本字典有:

 normal -> 0.5
 fire -> 2

另一个有:

 water-> 0.5
 fire -> 2

合并后将是:

 normal -> 0.5
 water-> 0.5
 fire -> 4

我找到了一个名为 dict 的函数mergehttps ://package.elm-lang.org/packages/elm/core/1.0.2/Dict#merge ,但不知道如何使用它,也找不到例子。

那么,你如何使用 Dict.merge 呢?你能举个例子吗?

标签: dictionaryelm

解决方案


签名可能会让您感到困惑,因为它不限于合并到一个新的Dict,而是可以合并到一个键值对列表中,例如。在阅读您的情况下的签名时,您可以替换resultDict comparable c. 甚至可以Int同时使用a,bc.

编辑:为了方便参考,签名是:

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

推荐阅读