Добавить/удалить пары ключ-значение с карты

Как добавить (и удалить) пары ключ-значение в карте Elixir? Это не работает:

map = %{a: 1, b: 2, c: 3}

map[:d] = 4

Ответ 1

Добавить к карте

Используйте Map.put(map, key, value):

Map.put(map, :d, 4)
#=> %{a: 1, b: 2, c: 3, d: 4}

Удалить из карты

Используйте Map.delete(map, key):

Map.delete(map, :b)
#=> %{a: 1, c: 3}

Ответ 2

Твоя проблема

Не забывайте, что переменные неизменны в Elixir.

Таким образом, следующий код не имеет смысла, потому что вы не можете напрямую изменить значение map или map[:d] следующим образом:

map[:d] = 4

Решение

Вот функции, которые вы можете использовать вместо этого:

Как использовать эти функции?

Поскольку переменные Эликсира неизменяемы, эти функции возвращают новую карту вместо прямого изменения вашей карты. Пример:

iex(1)> map = %{a: 1, b: 2, c: 3}
%{a: 1, b: 2, c: 3}
iex(2)> Map.put(map, :d, 4)
%{a: 1, b: 2, c: 3, d: 4}
iex(3)> map
%{a: 1, b: 2, c: 3} # map is unchanged

Поэтому, если вы хотите "изменить" свою карту, вам нужно заменить свою старую переменную map на новую карту, возвращаемую Map.put() или Map.delete(). Пример:

iex(1)> map = %{a: 1, b: 2, c: 3}
%{a: 1, b: 2, c: 3}
iex(2)> map = Map.put(map, :d, 4)
%{a: 1, b: 2, c: 3, d: 4}
iex(3)> map = Map.delete(map, :a)
%{b: 2, c: 3, d: 4}