我正在寻找一个函数来检索erlang中列表的最后两个元素.
我试过了
lists:nthtail( lists:length(List) - 2, List)
Run Code Online (Sandbox Code Playgroud)
没有运气,任何帮助表示赞赏.
你应该使用length/1而不是list:length/1,它不存在:
1> L = [1,2,3,4].
[1,2,3,4]
2> lists:nthtail(length(L)-2, L).
[3,4]
Run Code Online (Sandbox Code Playgroud)
或者您可以使用列表:reverse/1和模式匹配:
1> L = [1,2,3,4].
[1,2,3,4]
2> [A, B | _] = lists:reverse(L).
[4,3,2,1]
3> A.
4
4> B.
3
Run Code Online (Sandbox Code Playgroud)
另一种方法是:
last_two([A, B] = L) -> L;
last_two([_|L]) -> last_two(L).
Run Code Online (Sandbox Code Playgroud)
它会减少堆上的垃圾:
[B, A | _] = lists:reverse(L), [A, B].
Run Code Online (Sandbox Code Playgroud)