从列表中删除多个元素

时间:2018-11-01 01:59:28

标签: elixir

给出此列表:

list = [1,2,3,4,5]

如何返回包含这些元素的新列表?

[3,4,5]

我知道我使用List.delete/2,但据我所知,一次只能删除1个元素。我想一举删除前两个元素。

4 个答案:

答案 0 :(得分:1)

我认为您正在寻找这个

# Example with static values
iex> [1, 2, 3, 4, 5] -- [1, 2]
[3, 4, 5]

# Example with Enum.drop/2, with multiple values
iex> Enum.drop([1, 2, 3, 4, 5], 2)
[3, 4, 5]
iex> Enum.drop([1, 2, 3, 4, 5], -2)
[1, 2, 3]
iex> Enum.drop([1, 2, 3, 4, 5], 20)
[]
iex> Enum.drop([1, 2, 3, 4, 5], -20)
[]

您只能使用List.delete/2一次删除一个,而Enum.drop/2可以删除多个取决于您如何使用它。

答案 1 :(得分:1)

仅撤出前2个元素:您可以像这样进行图案匹配:

[_,_|sublist] = list

您也可以两次使用tl/1

list |> tl() |> tl ()

但是,最后一种解决方案并非一fell而就。

如果要删除的元素数量有所不同,我看不到@Dogbert建议的另一种解决方案:使用Enum.drop/2或也Enum.split/2这样:

{_,sublist} = Enum.split(list,2)

答案 2 :(得分:1)

如果要基于任意条件删除元素,则可以使用Enum.reject/2,并提供拒绝条件作为参数。

iex(1)> Enum.reject([1,2,3,4,5], fn x -> x in [1,2] end)
[3, 4, 5]

答案 3 :(得分:0)

另一种可以根据您的实现动态变化的方法是declare BRANCH_NAME="bugfix/US3280841-something-duh"; # Trim it down to "US3280841" TRIMMED=$(echo $BRANCH_NAME | perl -nle 'm/^.*\/([a-z0-9]|[A-Z0-9])+/; print $1');

它看起来像这样:

Enum.filter/2