gpt4 book ai didi

elixir - Elixir 是否有 `Kernel.delete_in` 等价物?

转载 作者:行者123 更新时间:2023-12-02 20:43:02 26 4
gpt4 key购买 nike

Elixir 的 Kernel.put_in非常适合在嵌套结构深处添加或更新值。但是,它不支持删除该值,而且我在任何地方都看不到 delete_in

是否存在 delete_inpop_in 或其他等效项?有点像

def delete_in(data, keys) do
put_in(data, keys, :magic_value_that_deletes_the_final_key)
end

没有它,添加和更新函数看起来就像不错的管道,但删除或弹出函数看起来就不那么整洁了。

最佳答案

是的,Kernel.pop_in/1Kernel.pop_in/2存在,它返回删除的值和没有我们刚刚删除的键/路径的数据值。

iex(1)> data = %{1 => %{2 => %{3 => 4, 5 => 6}}}
%{1 => %{2 => %{3 => 4, 5 => 6}}}
iex(2)> pop_in(data, [1, 2, 5])
{6, %{1 => %{2 => %{3 => 4}}}}
iex(3)> pop_in(data[1][2][5])
{6, %{1 => %{2 => %{3 => 4}}}}

要仅获取没有弹出值的数据,您可以使用模式匹配或 |> elem(1):

iex(4)> pop_in(data, [1, 2, 5]) |> elem(1)
%{1 => %{2 => %{3 => 4}}}
iex(5)> pop_in(data[1][2][5]) |> elem(1)
%{1 => %{2 => %{3 => 4}}}

关于elixir - Elixir 是否有 `Kernel.delete_in` 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45497081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com