Добавить/удалить пары ключ-значение с карты Как добавить (и удалить) пары ключ-значение в карте 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 Решение Вот функции, которые вы можете использовать вместо этого: 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}
Ответ 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 Решение Вот функции, которые вы можете использовать вместо этого: 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}