地图 | 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}
例外情况Map1
或Map2
不是地图。
例子:
> 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
并将删除的元组Value
和Map2
不带键的新映射返回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"}