20132016 Ericsson AB. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. maps Björn-Egil Dahlberg 1 2014-02-28 A
maps Maps Processing Functions

This module contains functions for maps processing.

Choose pairs which satisfy a predicate

Returns a map Map2 for which predicate Pred holds true in Map1.

The call will fail with a {badmap,Map} exception if Map1 is not a map or with badarg if Pred is not a function of arity 2.

Example:

> M = #{a => 2, b => 3, c=> 4, "a" => 1, "b" => 2, "c" => 4}, Pred = fun(K,V) -> is_atom(K) andalso (V rem 2) =:= 0 end, maps:filter(Pred,M). #{a => 2,c => 4}

Returns a tuple {ok, Value} where Value is the value associated with Key, or error if no value is associated with Key in Map.

The call will fail with a {badmap,Map} exception if Map is not a map.

Example:

> Map = #{"hi" => 42}, Key = "hi", maps:find(Key,Map). {ok,42}

Calls F(K, V, AccIn) for every K to value V association in Map in arbitrary order. The function fun F/3 must return a new accumulator which is passed to the next successive call. maps:fold/3 returns the final value of the accumulator. The initial accumulator value Init is returned if the map is empty.

Example:

> Fun = fun(K,V,AccIn) when is_list(K) -> AccIn + V end, Map = #{"k1" => 1, "k2" => 2, "k3" => 3}, maps:fold(Fun,0,Map). 6

The function takes a list of key-value tuples elements and builds a map. The associations may be in any order and both keys and values in the association may be of any term. If the same key appears more than once, the latter (rightmost) value is used and the previous values are ignored.

Example:

> List = [{"a",ignored},{1337,"value two"},{42,value_three},{"a",1}], maps:from_list(List). #{42 => value_three,1337 => "value two","a" => 1}

Returns the value Value associated with Key if Map contains Key.

The call will fail with a {badmap,Map} exception if Map is not a map, or with a {badkey,Key} exception if no value is associated with Key.

Example:

> Key = 1337, Map = #{42 => value_two,1337 => "value one","a" => 1}, maps:get(Key,Map). "value one"

Returns the value Value associated with Key if Map contains Key. If no value is associated with Key then returns Default.

The call will fail with a {badmap,Map} exception if Map is not a map.

Example:

> Map = #{ key1 => val1, key2 => val2 }. #{key1 => val1,key2 => val2} > maps:get(key1, Map, "Default value"). val1 > maps:get(key3, Map, "Default value"). "Default value"

Returns true if map Map contains Key and returns false if it does not contain the Key.

The call will fail with a {badmap,Map} exception if Map is not a map.

Example:

> Map = #{"42" => value}. #{"42"> => value} > maps:is_key("42",Map). true > maps:is_key(value,Map). false

Returns a complete list of keys, in arbitrary order, which resides within Map.

The call will fail with a {badmap,Map} exception if Map is not a map.

Example:

> Map = #{42 => value_three,1337 => "value two","a" => 1}, maps:keys(Map). [42,1337,"a"]

The function produces a new map Map2 by calling the function fun F(K, V1) for every K to value V1 association in Map1 in arbitrary order. The function fun F/2 must return the value V2 to be associated with key K for the new map Map2.

Example:

> Fun = fun(K,V1) when is_list(K) -> V1*2 end, Map = #{"k1" => 1, "k2" => 2, "k3" => 3}, maps:map(Fun,Map). #{"k1" => 2,"k2" => 4,"k3" => 6}

Merges two maps into a single map Map3. If two keys exists in both maps the value in Map1 will be superseded by the value in Map2.

The call will fail with a {badmap,Map} exception if Map1 or Map2 is not a map.

Example:

> Map1 = #{a => "value_one", b => "value_two"}, Map2 = #{a => 1, c => 2}, maps:merge(Map1,Map2). #{a => 1,b => "value_two",c => 2}

Returns a new empty map.

Example:

> maps:new(). #{}

Associates Key with value Value and inserts the association into map Map2. If key Key already exists in map Map1, the old associated value is replaced by value Value. The function returns a new map Map2 containing the new association and the old associations in Map1.

The call will fail with a {badmap,Map} exception if Map1 is not a map.

Example:

> Map = #{"a" => 1}. #{"a" => 1} > maps:put("a", 42, Map). #{"a" => 42} > maps:put("b", 1337, Map). #{"a" => 1,"b" => 1337}

The function removes the Key, if it exists, and its associated value from Map1 and returns a new map Map2 without key Key.

The call will fail with a {badmap,Map} exception if Map1 is not a map.

Example:

> Map = #{"a" => 1}. #{"a" => 1} > maps:remove("a",Map). #{} > maps:remove("b",Map). #{"a" => 1}

The function removes the Key, if it exists, and its associated value from Map1 and returns a tuple with the removed Value and the new map Map2 without key Key. If the key does not exist error is returned.

The call will fail with a {badmap,Map} exception if Map1 is not a map.

Example:

> Map = #{"a" => "hello", "b" => "world"}. #{"a" => "hello", "b" => "world"} > maps:take("a",Map). {"hello",#{"b" => "world"}} > maps:take("does not exist",Map). error

The function returns the number of key-value associations in the Map. This operation happens in constant time.

Example:

> Map = #{42 => value_two,1337 => "value one","a" => 1}, maps:size(Map). 3

The fuction returns a list of pairs representing the key-value associations of Map, where the pairs, [{K1,V1}, ..., {Kn,Vn}], are returned in arbitrary order.

The call will fail with a {badmap,Map} exception if Map is not a map.

Example:

> Map = #{42 => value_three,1337 => "value two","a" => 1}, maps:to_list(Map). [{42,value_three},{1337,"value two"},{"a",1}]

If Key exists in Map1 the old associated value is replaced by value Value. The function returns a new map Map2 containing the new associated value.

The call will fail with a {badmap,Map} exception if Map1 is not a map, or with a {badkey,Key} exception if no value is associated with Key.

Example:

> Map = #{"a" => 1}. #{"a" => 1} > maps:update("a", 42, Map). #{"a" => 42}

Update a value in a Map1 associated with Key by calling Fun on the old value to get a new value. An exception {badkey,Key} is generated if Key is not present in the map.

Example:

> Map = #{"counter" => 1}, Fun = fun(V) -> V + 1 end, maps:update_with("counter",Fun,Map). #{"counter" => 2}

Update a value in a Map1 associated with Key by calling Fun on the old value to get a new value. If Key is not present in Map1 then Init will be associated with Key.

Example:

> Map = #{"counter" => 1}, Fun = fun(V) -> V + 1 end, maps:update_with("new counter",Fun,42,Map). #{"counter" => 1,"new counter" => 42}

Returns a complete list of values, in arbitrary order, contained in map Map.

The call will fail with a {badmap,Map} exception if Map is not a map.

Example:

> Map = #{42 => value_three,1337 => "value two","a" => 1}, maps:values(Map). [value_three,"value two",1]

Returns a new map Map2 with the keys K1 through Kn and their associated values from map Map1. Any key in Ks that does not exist in Map1 are ignored.

Example:

> Map = #{42 => value_three,1337 => "value two","a" => 1}, Ks = ["a",42,"other key"], maps:with(Ks,Map). #{42 => value_three,"a" => 1}

Returns a new map Map2 without the keys K1 through Kn and their associated values from map Map1. Any key in Ks that does not exist in Map1 are ignored.

Example:

> Map = #{42 => value_three,1337 => "value two","a" => 1}, Ks = ["a",42,"other key"], maps:without(Ks,Map). #{1337 => "value two"}