web-dev-qa-db-fra.com

Ajouter / supprimer des paires clé-valeur d'une carte

Comment ajouter (et supprimer) des paires clé-valeur dans une carte Elixir? Cela ne fonctionne pas:

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

map[:d] = 4
22
Sheharyar

Ajouter à la carte

Utilisez Map.put(map, key, value) :

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

Supprimer de la carte

Utilisez Map.delete(map, key) :

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

Ton problème

N'oubliez pas que les variables sont immuables dans Elixir.

Le code suivant n'a donc aucun sens, car vous ne pouvez pas modifier directement la valeur de map ou map[:d] Comme ceci:

map[:d] = 4

Solution

Voici les fonctions que vous pouvez utiliser à la place:

Comment utiliser ces fonctions?

Puisque les variables Elixir sont immuables, ces fonctions renvoient une nouvelle carte , au lieu de changer directement votre carte. Exemple:

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

Donc, si vous voulez "changer" votre carte, vous devez remplacer votre ancienne variable map par la nouvelle carte renvoyée par Map.put() ou Map.delete(). Exemple:

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}
19
Ronan Boiteau