给出此列表:
list = [1,2,3,4,5]
如何返回包含这些元素的新列表?
[3,4,5]
我知道我使用List.delete/2
,但据我所知,一次只能删除1个元素。我想一举删除前两个元素。
答案 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