Erlang 20

地图 | maps

maps

模块

maps

模块摘要

地图处理功能。

描述

该模块包含地图处理功能。

输出

filter(Pred, Map1) -> Map2

类型

返回Map2谓词Pred在其中成立的映射Map1

如果Map1不是地图,则调用失败,并发生{badmap,Map}异常,如果Pred不是arity 2的函数,则调用badarg。

例子:

> 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}

find(Key, Map) -> {ok, Value} | error

类型

返回一个元组{ok,Value},其中Value是与Key关联的值,或者如果没有值与Key in Map关联,则返回错误。

如果Map不是地图,则调用会失败并发生异常{badmap,Map}

例子:

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

fold(Fun, Init, Map) -> Acc

类型

以任何顺序为每个K调用F(K,V,AccIn)以在Map中关联V关联。 函数fun F / 3必须返回一个新的累加器,该累加器被传递给下一个连续的调用。 该函数返回累加器的最终值。 如果地图为空,则返回初始累加器值Init。

例子:

> 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

from_list(List) -> Map

类型

获取键值元组列表并构建一张地图。关联可以以任何顺序进行,并且关联中的关键字和值都可以是任何术语。如果同一个键出现不止一次,则使用后者(最右侧)值,并忽略先前的值。

例子:

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

get(Key, Map) -> Value

类型

返回值如果Map包含Key,则返回值与Key相关联的值。

如果Map不是地图,则调用会失败,并会出现{badmap,Map}异常,如果没有与Key关联的值,则调用会出现{badkey,Key}异常。

例子:

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

get(Key, Map, Default) -> Value | Default

类型

返回值如果Map包含Key,则返回值与Key相关联的值。 如果没有与Key关联的值,则返回Default。

调用失败。{badmap,Map}例外情况Map不是地图。

例子:

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

is_key(Key, Map) -> boolean()

类型

如果映射Map包含Key,则返回true,如果Map不包含Key,则返回false。

如果Map不是地图,则调用会失败并出现{badmap,Map}异常。

例子:

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

keys(Map) -> Keys

类型

以任何顺序返回一个完整的键列表,其中驻留Map

调用失败。{badmap,Map}例外情况Map不是地图。

例子:

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

map(Fun, Map1) -> Map2

类型

通过调用函数fun F(K,V1)来为Map1中的每个K赋值V1关联,以任意顺序生成新的地图Map2。 函数fun F / 2必须返回值V2以与新地图Map2的键K相关联。

例子:

> 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}

merge(Map1, Map2) -> Map3

类型

将两个地图合并成一个地图Map3。 如果两个映射中都存在两个键,则Map1中的值将被Map2中的值取代。

调用失败。{badmap,Map}例外情况Map1Map2不是地图。

例子:

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

new() -> Map

类型

返回一个新的空映射。

例子:

> maps:new(). #{}

put(Key, Value, Map1) -> Map2

类型

关联值和值,并将关联插入地图Map2中。 如果Key Map已经存在于地图Map1中,则旧的关联值将被替换为值Value。 该函数返回包含Map1中新关联和旧关联的新地图Map2。

调用失败。{badmap,Map}例外情况Map1不是地图。

例子:

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

remove(Key, Map1) -> Map2

类型

如果Key存在,则从Map1移除关联值,并返回一个不带Key键的新Map2。

调用失败。{badmap,Map}例外情况Map1不是地图。

例子:

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

size(Map) -> integer() >= 0

类型

返回中的键值关联数Map。此操作在一段时间内发生。

例子:

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

取%28 Key,Map 1%29->{value,map 2}错误

类型

该函数将删除该元素Key(如果存在)以及其相关联的值,Map1并将删除的元组ValueMap2不带键的新映射返回Key。如果该键不存在error则返回。

如果Map1不是地图,该调用将失败并产生异常{badmap,Map}

例子:

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

to_list(Map) -> {Key, Value}

类型

返回表示键值关联的对的列表Map,其中对[{K1,V1}, ..., {Kn,Vn}]以任意顺序返回。

调用失败。{badmap,Map}例外情况Map不是地图。

例子:

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

update(Key, Value, Map1) -> Map2

类型

如果Key存在于Map1,则旧的关联值被替换为值。Value函数返回一个新的映射Map2包含新的关联值。

如果Map1不是地图,则调用将失败,并发生{badmap,Map}异常,如果没有与Key关联的值,则调用将发生{badkey,Key}异常。

例子:

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

update_with(Key,Fun,Map1) - > Map2

类型

通过对旧值调用Fun来更新与Key关联的Map1中的值以获取新值。 如果密钥不在地图中,则会生成一个例外{badkey,Key}。

例子:

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

update_with(Key, Fun, Init, Map1) -> Map2

类型

通过对旧值调用Fun来更新与Key关联的Map1中的值以获取新值。 如果Key不在Map1中,则Init将与Key相关联。

例子:

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

values(Map) -> Values

类型

返回map中包含的任意顺序的完整值列表Map

如果Map不是地图,则调用会失败并发生异常{badmap,Map}

例子:

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

with(Ks, Map1) -> Map2

类型

使用键K1到Kn以及从地图Map1关联的值返回新地图Map2。 K中任何不存在于Map1中的键都被忽略。

例子:

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

without(Ks, Map1) -> Map2

类型

返回没有键K1到Kn的新地图Map2及其来自地图Map1的相关值。 K中任何不存在于Map1中的键都被忽略

例子:

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