gpt4 book ai didi

list - 删除 Elixir 中列表元素的所有条目(不仅仅是第一个)

转载 作者:行者123 更新时间:2023-12-05 08:32:15 24 4
gpt4 key购买 nike

我找到了 List.delete/2 , 仅删除搜索到的第一个条目。我一直在寻找可以删除所有条目的东西,比如

[:a, :b, :c, :a, :a]
|> List.delete_all :a

[:b, :c]

有这样的吗?也许像 List.delete_all/2

最佳答案

您正在寻找Enum.reject/2

Enum.reject(~w|a b c a a|a, & &1 == :a)
#⇒ [:b, :c]

旁注:将管道用于单个操作被 Elixir 核心团队视为反模式。


另一种(更灵活)的可能性是使用 Enum.reduce/3 :

~w|a b c a a|a
|> Enum.reduce([],
&(if &1 == :a, do: &2, else: [&1 | &2]))
|> :lists.reverse()
#⇒ [:b, :c]

更错误(和优雅)的方法是使用递归:

defmodule M do
def get_rid_of(e, list, acc \\ [])
def get_rid_of(_, [], acc),
do: :list.reverse(acc)
def get_rid_of(e, [e | rest], acc),
do: get_rid_of(e, rest, acc)
def get_rid_of(e, [o | rest], acc),
do: get_rid_of(e, rest, [o | acc])
end
M.get_rid_of :a, ~w|a b c a a|a
#⇒ [:b, :c]

关于list - 删除 Elixir 中列表元素的所有条目(不仅仅是第一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52017631/

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