Elixir - обновить карту с ключами - PullRequest
0 голосов
/ 22 мая 2018

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

Мой код (продукт представляет собой карту с ключом "brand"):

  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 ]

0 голосов
/ 23 мая 2018

Более кратким синтаксисом является |оператор

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

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

my_map = %{"a" => 1, "b" => 2}
put_in(my_map["a"], 100)
0 голосов
/ 22 мая 2018

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

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

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

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

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

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