diff options
author | Björn-Egil Dahlberg <[email protected]> | 2015-05-19 10:16:47 +0200 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2015-05-19 10:16:47 +0200 |
commit | 3c7d5d09be54a602cc9bca3d47dd593e479d90d8 (patch) | |
tree | 3f50f70d6c6b149a305f5a178f3f56a248e362fe /lib/stdlib/src/maps.erl | |
parent | a3ccd5d0b7e51d67dd65aee37695bc4338f1a195 (diff) | |
parent | 48bd85fdfc0648facfc76078f8556a00b4f6febb (diff) | |
download | otp-3c7d5d09be54a602cc9bca3d47dd593e479d90d8.tar.gz otp-3c7d5d09be54a602cc9bca3d47dd593e479d90d8.tar.bz2 otp-3c7d5d09be54a602cc9bca3d47dd593e479d90d8.zip |
Merge branch 'egil/maps-filter/OTP-12745'
* egil/maps-filter/OTP-12745:
stdlib: Use lc to implement maps:map/2
stdlib: Test maps:filter/2
stdlib: Document maps:filter/2
stdlib: Add maps:filter/2
Diffstat (limited to 'lib/stdlib/src/maps.erl')
-rw-r--r-- | lib/stdlib/src/maps.erl | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/lib/stdlib/src/maps.erl b/lib/stdlib/src/maps.erl index 3877c150ec..533ff08726 100644 --- a/lib/stdlib/src/maps.erl +++ b/lib/stdlib/src/maps.erl @@ -19,7 +19,8 @@ -module(maps). --export([get/3,fold/3, map/2, size/1, +-export([get/3,filter/2,fold/3, map/2, + size/1, without/2, with/2]). @@ -145,6 +146,19 @@ get(Key,Map,Default) -> erlang:error({badmap,Map},[Key,Map,Default]). +-spec filter(Pred,Map1) -> Map2 when + Pred :: fun((Key, Value) -> boolean()), + Key :: term(), + Value :: term(), + Map1 :: map(), + Map2 :: map(). + +filter(Pred,Map) when is_function(Pred,2), is_map(Map) -> + maps:from_list([{K,V}||{K,V}<-maps:to_list(Map),Pred(K,V)]); +filter(Pred,Map) -> + erlang:error(error_type(Map),[Pred,Map]). + + -spec fold(Fun,Init,Map) -> Acc when Fun :: fun((K, V, AccIn) -> AccOut), Init :: term(), @@ -169,10 +183,7 @@ fold(Fun,Init,Map) -> V2 :: term(). map(Fun,Map) when is_function(Fun, 2), is_map(Map) -> - maps:from_list(lists:map(fun - ({K,V}) -> - {K,Fun(K,V)} - end,maps:to_list(Map))); + maps:from_list([{K,Fun(K,V)}||{K,V}<-maps:to_list(Map)]); map(Fun,Map) -> erlang:error(error_type(Map),[Fun,Map]). |