在Erlang中,我想获取包含n个元素的列表的第x个元素。我可以使用lists:nth/2
,但是当x> n时我会想要获得默认值(在这种情况下为[]
)。
是否有内置的方法来执行此操作而无需检查列表的长度?
答案 0 :(得分:1)
1> N = fun(Pos,List) ->
1> try
1> {ok,lists:nth(Pos,List)}
1> catch
1> _:_ -> {error,[]}
1> end
1> end.
#Fun<erl_eval.12.52032458>
2> N(2,[1,2,3,4]).
{ok,2}
3> N(5,[1,2,3,4]).
{error,[]}
4>
我使用标记的返回值来区分{ok,[]} = N(2,[a,[],b]).
和{error,[]} = N(500,[a]).
答案 1 :(得分:0)
不幸的是,没有BIF或NIF可能会为您做这件事。你最好的办法是用一个警卫写一个小包装函数来检查长度。类似的东西:
F = fun (N, L) when N > length(L) -> [];
(N, L) -> lists:nth(N,L) end.