Ответ 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}
Как добавить (и удалить) пары ключ-значение в карте Elixir? Это не работает:
map = %{a: 1, b: 2, c: 3}
map[:d] = 4
Используйте 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}
Не забывайте, что переменные неизменны в Elixir.
Таким образом, следующий код не имеет смысла, потому что вы не можете напрямую изменить значение map
или map[:d]
следующим образом:
map[:d] = 4
Вот функции, которые вы можете использовать вместо этого:
Map.put(map, key, value)
добавляет элемент к карте
Map.delete(map, key)
удаляет элемент с карты
Поскольку переменные Эликсира неизменяемы, эти функции возвращают новую карту вместо прямого изменения вашей карты. Пример:
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}