Reduce is fine and a single iteration:
@spec reshape_map_int_fields(map) :: map
def reshape_map_int_fields(map) when is_map(map),
do: Enum.reduce(map, %{}, fn {k, v}, acc ->
Map.put(acc, k, maybe_reshape(k, v))
end)
@spec maybe_reshape(atom, term) :: integer | term
def maybe_reshape(k, v) when is_atom(k) and not is_integer(v) and not is_nil(v) do
case Atom.to_string(k) do
<<"int_", _>> ->
case Integer.parse(v) do
{new_val, _} -> new_val
_ -> nil
end
_ ->
v
end
end
def maybe_reshape(_, v), do: v


















