查看源码 dict (stdlib v6.2)

键值字典。

字典的表示形式未定义。

此模块提供与 orddict 模块相同的接口。一个区别是,当此模块认为两个键不匹配 (=:=) 时,它们是不同的;而 orddict 仅当两个键不比较相等 (==) 时才认为它们是不同的。

注意

包括函数 appendappend_list,以便可以将键值存储在列表*累加器*中,例如

> D0 = dict:new(),
  D1 = dict:store(files, [], D0),
  D2 = dict:append(files, f1, D1),
  D3 = dict:append(files, f2, D2),
  D4 = dict:append(files, f3, D3),
  dict:fetch(files, D4).
[f1,f2,f3]

这省去了首先获取键值、将新值附加到存储的值列表以及存储结果的麻烦。

如果已知键在字典中,则使用函数 fetch,否则使用函数 find

另请参阅

gb_trees, orddict

概要

类型

new/0 返回的字典。

函数

将新的 附加到与 关联的当前值列表。

将值列表 值列表 附加到与 关联的当前值列表。如果与 关联的初始值不是值列表,则会生成异常。

从字典中删除具有给定键的所有项。

返回字典 Dict 中与 关联的值。此函数假设 存在于字典 Dict 中,如果 不在字典中,则会生成异常。

返回字典 Dict 中所有键的列表。

Dict2Dict1 中所有使 Pred(键, 值)true 的键和值的字典。

在字典 Dict 中搜索键。返回 {ok, 值},其中 是与 关联的值;如果键不在字典中,则返回 error

在字典 Dict 的连续键和值上调用 Fun,以及一个额外的参数 Acc(累加器的缩写)。Fun 必须返回一个传递给下一次调用的新累加器。如果字典为空,则返回 Acc0。评估顺序未定义。

- 列表 列表 转换为字典 Dict

如果字典 Dict 没有元素,则返回 true,否则返回 false

测试 是否包含在字典 Dict 中。

在字典 Dict1 的连续键和值上调用 Fun,以便为每个键返回一个新值。评估顺序未定义。

合并两个字典 Dict1Dict2,以创建一个新字典。两个字典中的所有 - 对都包含在新字典中。如果一个键出现在两个字典中,则使用该键和两个值调用 Fun 以返回一个新值。merge 可以定义如下,但速度更快

创建一个新字典。

返回字典 Dict 中的元素数量。

- 对存储在字典 Dict2 中。如果 已经存在于 Dict1 中,则关联的值将替换为

此函数从字典中返回值并返回一个不包含此值的新字典。如果该键不存在于字典中,则返回 error

将字典 Dict 转换为列表表示形式。

通过对值调用 Fun 以获取新值来更新字典中的值。如果 不在字典中,则会生成异常。

通过对值调用 Fun 以获取新值来更新字典中的值。如果 不在字典中,则将 Initial 存储为第一个值。例如,append/3 可以定义为

增量 添加到与 关联的值,并存储此值。如果 不在字典中,则将 增量 存储为第一个值。

类型

-type dict() :: dict(_, _).
-opaque dict(Key, Value)

new/0 返回的字典。

函数

链接到此函数

append(键, 值, Dict1)

查看源码
-spec append(Key, Value, Dict1) -> Dict2 when Dict1 :: dict(Key, Value), Dict2 :: dict(Key, Value).

将新的 附加到与 关联的当前值列表。

另请参阅 注意 部分。

链接到此函数

append_list(键, 值列表, Dict1)

查看源码
-spec append_list(Key, ValList, Dict1) -> Dict2
                     when Dict1 :: dict(Key, Value), Dict2 :: dict(Key, Value), ValList :: [Value].

将值列表 值列表 附加到与 关联的当前值列表。如果与 关联的初始值不是值列表,则会生成异常。

另请参阅 注意 部分。

-spec erase(Key, Dict1) -> Dict2 when Dict1 :: dict(Key, Value), Dict2 :: dict(Key, Value).

从字典中删除具有给定键的所有项。

-spec fetch(Key, Dict) -> Value when Dict :: dict(Key, Value).

返回字典 Dict 中与 关联的值。此函数假设 存在于字典 Dict 中,如果 不在字典中,则会生成异常。

另请参阅 注意 部分。

-spec fetch_keys(Dict) -> Keys when Dict :: dict(Key, Value :: term()), Keys :: [Key].

返回字典 Dict 中所有键的列表。

链接到此函数

filter(谓词, Dict1)

查看源码
-spec filter(Pred, Dict1) -> Dict2
                when
                    Pred :: fun((Key, Value) -> boolean()),
                    Dict1 :: dict(Key, Value),
                    Dict2 :: dict(Key, Value).

Dict2Dict1 中所有使 Pred(键, 值)true 的键和值的字典。

-spec find(Key, Dict) -> {ok, Value} | error when Dict :: dict(Key, Value).

在字典 Dict 中搜索键。返回 {ok, 值},其中 是与 关联的值;如果键不在字典中,则返回 error

另请参阅 注意 部分。

链接到此函数

fold(Fun, Acc0, Dict)

查看源码
-spec fold(Fun, Acc0, Dict) -> Acc1
              when
                  Fun :: fun((Key, Value, AccIn) -> AccOut),
                  Dict :: dict(Key, Value),
                  Acc0 :: Acc,
                  Acc1 :: Acc,
                  AccIn :: Acc,
                  AccOut :: Acc.

在字典 Dict 的连续键和值上调用 Fun,以及一个额外的参数 Acc(累加器的缩写)。Fun 必须返回一个传递给下一次调用的新累加器。如果字典为空,则返回 Acc0。评估顺序未定义。

-spec from_list(List) -> Dict when Dict :: dict(Key, Value), List :: [{Key, Value}].

- 列表 列表 转换为字典 Dict

链接到此函数

is_empty(Dict)

查看源码 (自 OTP 17.0 起)
-spec is_empty(Dict) -> boolean() when Dict :: dict().

如果字典 Dict 没有元素,则返回 true,否则返回 false

-spec is_key(Key, Dict) -> boolean() when Dict :: dict(Key, Value :: term()).

测试 是否包含在字典 Dict 中。

-spec map(Fun, Dict1) -> Dict2
             when
                 Fun :: fun((Key, Value1) -> Value2),
                 Dict1 :: dict(Key, Value1),
                 Dict2 :: dict(Key, Value2).

在字典 Dict1 的连续键和值上调用 Fun,以便为每个键返回一个新值。评估顺序未定义。

链接到此函数

merge(Fun, Dict1, Dict2)

查看源码
-spec merge(Fun, Dict1, Dict2) -> Dict3
               when
                   Fun :: fun((Key, Value1, Value2) -> Value),
                   Dict1 :: dict(Key, Value1),
                   Dict2 :: dict(Key, Value2),
                   Dict3 :: dict(Key, Value).

合并两个字典 Dict1Dict2,以创建一个新字典。两个字典中的所有 - 对都包含在新字典中。如果一个键出现在两个字典中,则使用该键和两个值调用 Fun 以返回一个新值。merge 可以定义如下,但速度更快

merge(Fun, D1, D2) ->
    fold(fun (K, V1, D) ->
                 update(K, fun (V2) -> Fun(K, V1, V2) end, V1, D)
         end, D2, D1).
-spec new() -> dict().

创建一个新字典。

-spec size(Dict) -> non_neg_integer() when Dict :: dict().

返回字典 Dict 中的元素数量。

链接到此函数

store(键, 值, Dict1)

查看源码
-spec store(Key, Value, Dict1) -> Dict2 when Dict1 :: dict(Key, Value), Dict2 :: dict(Key, Value).

- 对存储在字典 Dict2 中。如果 已经存在于 Dict1 中,则关联的值将替换为

链接到此函数

take(键, Dict)

查看源码 (自 OTP 20.0 起)
-spec take(Key, Dict) -> {Value, Dict1} | error
              when Dict :: dict(Key, Value), Dict1 :: dict(Key, Value), Key :: term(), Value :: term().

此函数从字典中返回值并返回一个不包含此值的新字典。如果该键不存在于字典中,则返回 error

-spec to_list(Dict) -> List when Dict :: dict(Key, Value), List :: [{Key, Value}].

将字典 Dict 转换为列表表示形式。

链接到此函数

update(键, Fun, Dict1)

查看源码
-spec update(Key, Fun, Dict1) -> Dict2
                when
                    Dict1 :: dict(Key, Value),
                    Dict2 :: dict(Key, Value),
                    Fun :: fun((Value1 :: Value) -> Value2 :: Value).

通过对值调用 Fun 以获取新值来更新字典中的值。如果 不在字典中,则会生成异常。

链接到此函数

update(键, Fun, Initial, Dict1)

查看源码
-spec update(Key, Fun, Initial, Dict1) -> Dict2
                when
                    Dict1 :: dict(Key, Value),
                    Dict2 :: dict(Key, Value),
                    Fun :: fun((Value1 :: Value) -> Value2 :: Value),
                    Initial :: Value.

通过对值调用 Fun 以获取新值来更新字典中的值。如果 不在字典中,则将 Initial 存储为第一个值。例如,append/3 可以定义为

append(Key, Val, D) ->
    update(Key, fun (Old) -> Old ++ [Val] end, [Val], D).
链接到此函数

update_counter(键, 增量, Dict1)

查看源码
-spec update_counter(Key, Increment, Dict1) -> Dict2
                        when Dict1 :: dict(Key, Value), Dict2 :: dict(Key, Value), Increment :: number().

增量 添加到与 关联的值,并存储此值。如果 不在字典中,则将 增量 存储为第一个值。

这可以定义如下,但速度更快

update_counter(Key, Incr, D) ->
    update(Key, fun (Old) -> Old + Incr end, Incr, D).