【问题标题】:Elm: How to merge two dictionaries?Elm:如何合并两个字典?
【发布时间】:2018-11-22 18:16:55
【问题描述】:

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

例如,一本字典有:

 normal -> 0.5
 fire -> 2

另一个有:

 water-> 0.5
 fire -> 2

组合起来是:

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

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

那么,您如何使用 Dict.merge?可以举个例子吗?

【问题讨论】:

    标签: dictionary elm


    【解决方案1】:

    签名可能会让您感到困惑,因为它不限于合并到新的Dict,而是可以合并到例如键值对列表中。在阅读您案例中的签名时,您可以将result 替换为Dict comparable c。甚至使用Int 代替abc

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

    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
    

    【讨论】:

    • Dict.merge 的第一个和第三个参数可以 eta-reduced 为 Dict.insert。很好的答案。
    猜你喜欢
    • 2013-04-17
    • 2016-01-02
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2023-03-07
    • 2015-07-15
    相关资源
    最近更新 更多