> Erlang中文手册 > split/2 把一个列表分成两个列表

lists:split/2

把一个列表分成两个列表

用法:

split(N, List1) -> {List2, List3}

内部实现:

-spec split(N, List1) -> {List2, List3} when
      N :: non_neg_integer(),
      List1 :: [T],
      List2 :: [T],
      List3 :: [T],
      T :: term().

split(N, List) when is_integer(N), N >= 0, is_list(List) ->
    case split(N, List, []) of
	{_, _} = Result -> Result;
	Fault when is_atom(Fault) ->
	    erlang:error(Fault, [N,List])
    end;
split(N, List) ->
    erlang:error(badarg, [N,List]).

split(0, L, R) ->
    {lists:reverse(R, []), L};
split(N, [H|T], R) ->
    split(N-1, T, [H|R]);
split(_, [], _) ->
    badarg.

把列表 List1 以第 N 个元素为分离点,分成 List2 和 List3 这 2 个列表,列表 List2 包含列表 List1 前 N 个元素,列表 List3 则是剩下的。

lists:split(3, [a, b, c, d, e]).