I am trying to change the value of one key in an association based on the value of another key in that association. So if my association starts as:
x=<|"firstValue" -> True, "isFirstValueTrue" -> False|>
I want to change it to:
<|"firstValue" -> True, "isFirstValueTrue" -> True|>
So I wrote the function:
f[x_] := If[x[["firstValue"]], x[["isFirstValueTrue"]] = True, x[["isFirstValueTrue"]] = False]
I got an error, but based on this answer: http://stackoverflow.com/questions/12875913/setsetps-in-the-part-assignment-is-not-a-symbol I was to correct it by using:
SetAttributes[f, HoldAll].
But let's say I want to do this to a list of associations:
x={<|"firstValue" -> True, "isFirstValueTrue" -> False|>,
<|"firstValue" -> True, "isFirstValueTrue" -> True|>,
<|"firstValue" -> False, "isFirstValueTrue" -> False|>,
<|"firstValue" -> False, "isFirstValueTrue" -> True|>}
so I wrote:
Map[f[#] &, x]
However, the "in the part assignment is not a symbol." error appears again and you can't SetAttributes[Map, HoldAll]
. I realize I can make a copy of the list and make changes to that, but the actual list I'm working with is much larger so I do not want to do that. The third solution in the link above is able to be mapped, but it doesn't seem like you can replace in an association. Any suggestions?