Вяз: Как объединить два словаря? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть два словаря, и их значения указывают на эффективность типа атаки покемонов.Теперь я хочу объединить их, чтобы иметь объединенную эффективность.

Так, например, один словарь имеет:

 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?Не могли бы вы привести пример?

1 Ответ

0 голосов
/ 22 ноября 2018

Сигнатура может сбить вас с толку, поскольку она не ограничивается слиянием с новым 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
...