aboutsummaryrefslogtreecommitdiffstats
path: root/lib/stdlib/src/maps.erl
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2015-05-19 10:16:47 +0200
committerBjörn-Egil Dahlberg <[email protected]>2015-05-19 10:16:47 +0200
commit3c7d5d09be54a602cc9bca3d47dd593e479d90d8 (patch)
tree3f50f70d6c6b149a305f5a178f3f56a248e362fe /lib/stdlib/src/maps.erl
parenta3ccd5d0b7e51d67dd65aee37695bc4338f1a195 (diff)
parent48bd85fdfc0648facfc76078f8556a00b4f6febb (diff)
downloadotp-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.erl21
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]).