非常教程

Erlang 20参考手册

stdlib

地图 | 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"}
Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1