diff options
Diffstat (limited to 'lib/stdlib/src')
| -rw-r--r-- | lib/stdlib/src/orddict.erl | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/stdlib/src/orddict.erl b/lib/stdlib/src/orddict.erl index 45d3c84b3e..0b532abe0c 100644 --- a/lib/stdlib/src/orddict.erl +++ b/lib/stdlib/src/orddict.erl @@ -56,8 +56,10 @@ to_list(Dict) -> Dict.        List :: [{Key :: term(), Value :: term()}],        Orddict :: orddict(). +from_list([]) -> []; +from_list([{_,_}]=Pair) -> Pair;  from_list(Pairs) -> -    lists:foldl(fun ({K,V}, D) -> store(K, V, D) end, [], Pairs). +    lists:ukeysort(1, reverse_pairs(Pairs, [])).  -spec size(Orddict) -> non_neg_integer() when        Orddict :: orddict(). @@ -229,3 +231,7 @@ merge(F, [{K1,V1}|D1], [{_K2,V2}|D2]) ->	%K1 == K2      [{K1,F(K1, V1, V2)}|merge(F, D1, D2)];  merge(F, [], D2) when is_function(F, 3) -> D2;  merge(F, D1, []) when is_function(F, 3) -> D1. + +reverse_pairs([{_,_}=H|T], Acc) -> +    reverse_pairs(T, [H|Acc]); +reverse_pairs([], Acc) -> Acc.  | 
