эликсир-как получить все элементы, кроме последнего в списке?



Пусть у меня есть список [1, 2, 3, 4]



Как я могу получить все элементы из этого списка, кроме последнего? Итак, у меня будет [1, 2, 3]

375   6  

6 ответов:

Используйте Перечисление.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 |> Enum.reverse |> tl |> Enum.reverse, - это вариант Эрланга.:lists.droplast функция, которая медленнее в соответствии с документацией, но создает меньше мусора, потому что она не создает два новых списка. В зависимости от вашего варианта использования, который может быть интересным для использования.

Если вы хотите получить как последний элемент, так и остальную часть списка, предшествующего ему, теперь вы можете использовать List.pop_at/3:

{last, rest} = List.pop_at([1, 2, 3], -1)
{3, [1, 2]}

Https://hexdocs.pm/elixir/List.html#pop_at/3

Другой вариант, хотя и не элегантный, был бы -

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.

Comments

    Ничего не найдено.