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

时间:2018-02-28 13:50:04

标签: elixir

know how使用put_inget_inupdate_in在Elixir中放置,获取和更新嵌套地图,但我该如何操作" delete_in&#34 ;?

我们说我有这个嵌套的地图,我想删除键:c及其相关值。

iex(1)> mymap = %{:a => %{:b => 1, :c => 2}}
%{a: %{b: 1, c: 2}}

如何以有效的方式回到这一点?

{%a: %{b: 1}} 

2 个答案:

答案 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)

具有功能Map.update!Map.delete

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}}