6 ответов:
Мое решение (я думаю, что это не чистый, но он работает!)
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]}
Другой вариант, хотя и не элегантный, был бы -
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