我know how使用put_in
,get_in
和update_in
在Elixir中放置,获取和更新嵌套地图,但我该如何操作" delete_in
&#34 ;?
我们说我有这个嵌套的地图,我想删除键:c
及其相关值。
iex(1)> mymap = %{:a => %{:b => 1, :c => 2}}
%{a: %{b: 1, c: 2}}
如何以有效的方式回到这一点?
{%a: %{b: 1}}
答案 0 :(得分:3)
您正在寻找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}}
或
iex(4)> pop_in(map[:a][:c])
{2, %{a: %{b: 1}}}
iex(5)> pop_in(map[:a][:c]) |> elem(1)
%{a: %{b: 1}}
答案 1 :(得分:0)
iex(1)> map = %{:a => %{:b => 1, :c => 2}}
%{a: %{b: 1, c: 2}}
iex(2)> Map.update!(map, :a, &Map.delete(&1, :c))
%{a: %{b: 1}}
或更新缩短,如here。
iex(1)> map = %{:a => %{:b => 1, :c => 2}}
%{a: %{b: 1, c: 2}}
iex(2)> %{map | a: Map.delete(map.a, :c)}
%{a: %{b: 1}}