> Erlang中文手册 > split/2 按照键进行数据分割分组

proplists:split/2

按照键进行数据分割分组

用法:

split(List, Keys) -> {Lists, Rest}

内部实现:

-spec split(List, Keys) -> {Lists, Rest} when
      List :: [term()],
      Keys :: [term()],
      Lists :: [[term()]],
      Rest :: [term()].

split(List, Keys) ->
    {Store, Rest} = split(List, dict:from_list([{K, []} || K 
    if is_atom(P) ->
	    case dict:is_key(P, Store) of
		true ->
		    split(Ps, dict_prepend(P, P, Store), Rest);
		false ->
		    split(Ps, Store, [P | Rest])
	    end;
       tuple_size(P) >= 1 ->
	    %% Note that Key does not have to be an atom in this case.
	    Key = element(1, P),
	    case dict:is_key(Key, Store) of
		true ->
		    split(Ps, dict_prepend(Key, P, Store), Rest);
		false ->
		    split(Ps, Store, [P | Rest])
	    end;
       true ->
	    split(Ps, Store, [P | Rest])
    end;
split([], Store, Rest) ->
    {Store, Rest}.

把列表 List 分割成一个子列表 Lists 和一个剩余元素的列表 Rest。列表 Lists 是包含 Keys 里每一个键的一个子列表,并以相应的顺序排列。在子列表里元素的相对位置顺序的保存是按照原来列表 List 里的顺序。Rest 是跟给出的键没有相关联的元素的列表,它们的保存顺序也是按照原来列表里的顺序。

proplists:split([{c, 2}, {e, 1}, a, {c, 3, 4}, d, {b, 5}, b], [a, b, c]).