View Source maps_in
An Erlang library to handle nested maps.
table-of-contents
Table of contents
general-info
General info
Erlang does not provide functions to handle nested maps, so this lib has this purpose and always uses a list of keys to manipulate maps.
usage
Usage
filter-3
filter/3
1> Map = #{erlang => #{example => #{a => 2, b => 3, c => 4, "a" => 1, "b" => 2, "c" => 4}}}.
#{erlang =>
#{example =>
#{a => 2,b => 3,c => 4,"a" => 1,"b" => 2,"c" => 4}}}
2> Pred = fun(K, V) -> is_atom(K) andalso (V rem 2) =:= 0 end.
#Fun<erl_eval.41.3316493>
3> maps_in:filter([erlang, example], Pred, Map).
#{erlang => #{example => #{a => 2,c => 4}}}
filtermap-3-otp-24-0
filtermap/3 (OTP 24.0)
<!-- TODO -->
find-3
find/3
<!-- TODO -->
fold-4
fold/4
<!-- TODO -->
foreach-3
foreach/3
<!-- TODO -->
get-2
get/2
1> Map = #{my => #{nested => map}}.
#{my => #{nested => map}}
2> maps_in:get([my, nested], Map).
map
get-3
get/3
1> Map = #{my => #{nested => map}}.
#{my => #{nested => map}}
2> maps_in:get([my, unknown_key], Map, default).
default
keys-2
keys/2
<!-- TODO -->
is_key-3
is_key/3
<!-- TODO -->
iterator-2-otp-21
iterator/2 (OTP 21)
<!-- TODO -->
map-3
map/3
<!-- TODO -->
merge-3
merge/3
<!-- TODO -->
merge_with-4-otp-24-0
merge_with/4 (OTP 24.0)
<!-- TODO -->
put-3
put/3
1> Map = #{my => #{more => #{deep => #{}}}}.
#{my => #{more => #{deep => #{}}}}
2> maps_in:put([my, more, deep], #{nested => map}, Map).
#{my => #{more => #{deep => #{nested => map}}}}
remove-3
remove/3
<!-- TODO -->
size-2
size/2
<!-- TODO -->
take-3
take/3
<!-- TODO -->
to_list-2
to_list/2
<!-- TODO -->
update-3
update/3
1> Map = #{my => #{more => #{deep => #{}}}}.
#{my => #{more => #{deep => #{}}}}
2> maps_in:update([my, unknown_key], error, Map).
** exception error: bad key: unknown_key
3> maps_in:update([my, more, deep], #{nested => map}, Map).
#{my => #{more => #{deep => #{nested => map}}}}
update_with-3
update_with/3
1> Map = #{someone => #{age => 17}}.
#{someone => #{age => 17}}
2> maps_in:update_with([someone, age], fun(Age) -> Age + 1 end, Map).
#{someone => #{age => 18}}
update_with-4
update_with/4
<!-- TODO -->
values-2
values/2
<!-- TODO -->
with-3
with/3
<!-- TODO -->
without-3
without/3
<!-- TODO -->
build
Build
$ rebar3 compile
test
Test
$ rebar3 eunit