从Elixir中的嵌套地图中删除?

Tho*_*wne 1 elixir

知道 怎么放,获取和使用更新药剂嵌套地图put_inget_in以及update_in,但我怎么“ delete_in“?

假设我有此嵌套地图,并且想删除键:c及其关联的值。

iex(1)> mymap = %{:a => %{:b => 1, :c => 2}}
%{a: %{b: 1, c: 2}}
Run Code Online (Sandbox Code Playgroud)

我如何有效地回到这一点?

{%a: %{b: 1}} 
Run Code Online (Sandbox Code Playgroud)

Dog*_*ert 6

您正在寻找pop_in。该函数同时返回弹出的值和除去弹出值后的其余值。您可以通过管道输入忽略弹出的值|> elem(1)

iex(1)> map = %{:a => %{:b => 1, :c => 2}}
%{a: %{b: 1, c: 2}}
iex(2)> pop_in(map, [:a, :c])
{2, %{a: %{b: 1}}}
iex(3)> pop_in(map, [:a, :c]) |> elem(1)
%{a: %{b: 1}}
Run Code Online (Sandbox Code Playgroud)

要么

iex(4)> pop_in(map[:a][:c])
{2, %{a: %{b: 1}}}
iex(5)> pop_in(map[:a][:c]) |> elem(1)
%{a: %{b: 1}}
Run Code Online (Sandbox Code Playgroud)