Elm: How to merge two dictionaries?
I have two dictionaries, and their values incidcate type effectiveness of a Pokémon attack. Now I want to combine these to have the combined effectiveness.
So for instance, one dictionary has:
normal -> 0.5
fire -> 2
The other has:
water-> 0.5
fire -> 2
The combined would be:
normal -> 0.5
water-> 0.5
fire -> 4
I found a function for dict called merge
: https://package.elm-lang.org/packages/elm/core/1.0.2/Dict#merge, but can't figure out how to use it, nor could I find an example.
So, how do you use Dict.merge? Could you provide an example?
dictionary elm
add a comment |
I have two dictionaries, and their values incidcate type effectiveness of a Pokémon attack. Now I want to combine these to have the combined effectiveness.
So for instance, one dictionary has:
normal -> 0.5
fire -> 2
The other has:
water-> 0.5
fire -> 2
The combined would be:
normal -> 0.5
water-> 0.5
fire -> 4
I found a function for dict called merge
: https://package.elm-lang.org/packages/elm/core/1.0.2/Dict#merge, but can't figure out how to use it, nor could I find an example.
So, how do you use Dict.merge? Could you provide an example?
dictionary elm
add a comment |
I have two dictionaries, and their values incidcate type effectiveness of a Pokémon attack. Now I want to combine these to have the combined effectiveness.
So for instance, one dictionary has:
normal -> 0.5
fire -> 2
The other has:
water-> 0.5
fire -> 2
The combined would be:
normal -> 0.5
water-> 0.5
fire -> 4
I found a function for dict called merge
: https://package.elm-lang.org/packages/elm/core/1.0.2/Dict#merge, but can't figure out how to use it, nor could I find an example.
So, how do you use Dict.merge? Could you provide an example?
dictionary elm
I have two dictionaries, and their values incidcate type effectiveness of a Pokémon attack. Now I want to combine these to have the combined effectiveness.
So for instance, one dictionary has:
normal -> 0.5
fire -> 2
The other has:
water-> 0.5
fire -> 2
The combined would be:
normal -> 0.5
water-> 0.5
fire -> 4
I found a function for dict called merge
: https://package.elm-lang.org/packages/elm/core/1.0.2/Dict#merge, but can't figure out how to use it, nor could I find an example.
So, how do you use Dict.merge? Could you provide an example?
dictionary elm
dictionary elm
asked Nov 22 at 18:16
The Oddler
2,65022463
2,65022463
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
The signature might be confusing you because it isn't restricted to merging into a new Dict
, but could merge into a list of key-value pairs instead, for example. When reading the signature in your case you can replace result
with Dict comparable c
. or even use Int
in place of both a
, b
and c
.
Edit: For easy reference, the signature is:
merge :
(comparable -> a -> result -> result)
-> (comparable -> a -> b -> result -> result)
-> (comparable -> b -> result -> result)
-> Dict comparable a
-> Dict comparable b
-> result
-> result
When using it, in order to return an new Dict
we have to pass it Dict.empty
as the initial value and insert the values into the dictionary in each function ourselves, like this:
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
First and third arguments toDict.merge
can be eta-reduced toDict.insert
. Nice answer.
– user633183
Dec 1 at 2:42
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436370%2felm-how-to-merge-two-dictionaries%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The signature might be confusing you because it isn't restricted to merging into a new Dict
, but could merge into a list of key-value pairs instead, for example. When reading the signature in your case you can replace result
with Dict comparable c
. or even use Int
in place of both a
, b
and c
.
Edit: For easy reference, the signature is:
merge :
(comparable -> a -> result -> result)
-> (comparable -> a -> b -> result -> result)
-> (comparable -> b -> result -> result)
-> Dict comparable a
-> Dict comparable b
-> result
-> result
When using it, in order to return an new Dict
we have to pass it Dict.empty
as the initial value and insert the values into the dictionary in each function ourselves, like this:
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
First and third arguments toDict.merge
can be eta-reduced toDict.insert
. Nice answer.
– user633183
Dec 1 at 2:42
add a comment |
The signature might be confusing you because it isn't restricted to merging into a new Dict
, but could merge into a list of key-value pairs instead, for example. When reading the signature in your case you can replace result
with Dict comparable c
. or even use Int
in place of both a
, b
and c
.
Edit: For easy reference, the signature is:
merge :
(comparable -> a -> result -> result)
-> (comparable -> a -> b -> result -> result)
-> (comparable -> b -> result -> result)
-> Dict comparable a
-> Dict comparable b
-> result
-> result
When using it, in order to return an new Dict
we have to pass it Dict.empty
as the initial value and insert the values into the dictionary in each function ourselves, like this:
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
First and third arguments toDict.merge
can be eta-reduced toDict.insert
. Nice answer.
– user633183
Dec 1 at 2:42
add a comment |
The signature might be confusing you because it isn't restricted to merging into a new Dict
, but could merge into a list of key-value pairs instead, for example. When reading the signature in your case you can replace result
with Dict comparable c
. or even use Int
in place of both a
, b
and c
.
Edit: For easy reference, the signature is:
merge :
(comparable -> a -> result -> result)
-> (comparable -> a -> b -> result -> result)
-> (comparable -> b -> result -> result)
-> Dict comparable a
-> Dict comparable b
-> result
-> result
When using it, in order to return an new Dict
we have to pass it Dict.empty
as the initial value and insert the values into the dictionary in each function ourselves, like this:
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
The signature might be confusing you because it isn't restricted to merging into a new Dict
, but could merge into a list of key-value pairs instead, for example. When reading the signature in your case you can replace result
with Dict comparable c
. or even use Int
in place of both a
, b
and c
.
Edit: For easy reference, the signature is:
merge :
(comparable -> a -> result -> result)
-> (comparable -> a -> b -> result -> result)
-> (comparable -> b -> result -> result)
-> Dict comparable a
-> Dict comparable b
-> result
-> result
When using it, in order to return an new Dict
we have to pass it Dict.empty
as the initial value and insert the values into the dictionary in each function ourselves, like this:
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
edited Nov 22 at 19:09
answered Nov 22 at 18:35
glennsl
9,601102746
9,601102746
First and third arguments toDict.merge
can be eta-reduced toDict.insert
. Nice answer.
– user633183
Dec 1 at 2:42
add a comment |
First and third arguments toDict.merge
can be eta-reduced toDict.insert
. Nice answer.
– user633183
Dec 1 at 2:42
First and third arguments to
Dict.merge
can be eta-reduced to Dict.insert
. Nice answer.– user633183
Dec 1 at 2:42
First and third arguments to
Dict.merge
can be eta-reduced to Dict.insert
. Nice answer.– user633183
Dec 1 at 2:42
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436370%2felm-how-to-merge-two-dictionaries%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown