列表元素提取

时间:2017-03-23 11:30:34

标签: erlang

在Erlang中,我想获取包含n个元素的列表的第x个元素。我可以使用lists:nth/2,但是当x> n时我会想要获得默认值(在这种情况下为[])。

是否有内置的方法来执行此操作而无需检查列表的长度?

2 个答案:

答案 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.