Elixir - обновить карту, имеющую строковые ключи

Как мне обновить карту, которая имеет строковые ключи? Я хочу обновить значение "бренда".

Мой код (продукт - это карта с ключом бренда):

  brand = URI.decode(product["brand"])
  IO.inspect(brand, label: "uri decode")
  brand = elem(Poison.decode(brand), 1)
  IO.inspect(brand, label: "json decode")
  Map.put(product, "brand", brand)
  IO.inspect(product["brand"], label: "actual product brand")

выходы:

uri decode: "\"e&ggsssssaaqss\""
json decode: "e&ggsssssaaqss"
actual product brand: "%22e%26ggsssssaaqss%22"

Не обновляется product["brand"]

actual product brand лог должен равняться json decode войти, если это будет обновлено.

Что я делаю неправильно?

2 ответа

Решение

Если на карте есть строковые ключи, например:

my_map = %{"a" => 1, "b" => 2}

Вы можете создать новую карту с измененным ключом следующим образом:

my_new_map = Map.put(my_map, "a", 100)

Или вы можете привязать существующий my_map Переменная с обновленной картой выглядит так:

my_map = Map.put(my_map, "a", 100)

Более краткий синтаксис - это | оператор

my_map = %{"a" => 1, "b" => 2}
%{my_map | "a" => 100}

или также вы можете использовать put_in метод

my_map = %{"a" => 1, "b" => 2}
put_in(my_map["a"], 100)
Другие вопросы по тегам