【发布时间】:2018-09-16 11:29:27
【问题描述】:
假设我有一个列表[1, 2, 3, 4]
如何从这个列表中获取除最后一个之外的所有元素?所以,我要[1, 2, 3]
【问题讨论】:
标签: elixir
假设我有一个列表[1, 2, 3, 4]
如何从这个列表中获取除最后一个之外的所有元素?所以,我要[1, 2, 3]
【问题讨论】:
标签: elixir
像这样使用 Enum.drop/2:
list = [1, 2, 3, 4]
Enum.drop list, -1 # [1, 2, 3]
【讨论】:
我的解决方案(我认为它不干净,但它有效!)
a = [1, 2, 3, 4]
[head | tail] = Enum.reverse(a)
Enum.reverse(tail) # [1, 2, 3]
【讨论】:
如果您希望同时获取最后一项和前面的列表的其余部分,您现在可以使用List.pop_at/3:
{last, rest} = List.pop_at([1, 2, 3], -1)
{3, [1, 2]}
【讨论】:
除了前面提到的list |> Enum.reverse |> tl |> Enum.reverse 之外的另一个选项是Erlang 的:lists.droplast 函数,根据文档,该函数速度较慢,但产生的垃圾更少,因为它不会创建两个新列表。根据您的用例,这可能是一个有趣的使用。
【讨论】:
另一种选择,虽然不优雅,但是 -
list = [1, 2, 3, 4]
Enum.take(list, Enum.count(list) -1 ) # [1, 2, 3]
【讨论】:
二郎
List = [1,2,3,4,5],
NewList = DropLast(List).
DropLast(List) while length(List) > 0 and is_list(List) ->
{NewList, _} = lists:split(OldList, length(OldList)-1),
NewList.
【讨论】: