查看源码 dict (stdlib v6.2)
键值字典。
字典的表示形式未定义。
此模块提供与 orddict
模块相同的接口。一个区别是,当此模块认为两个键不匹配 (=:=
) 时,它们是不同的;而 orddict
仅当两个键不比较相等 (==
) 时才认为它们是不同的。
注意
包括函数 append
和 append_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
。
另请参阅
概要
函数
将新的 值
附加到与 键
关联的当前值列表。
将值列表 值列表
附加到与 键
关联的当前值列表。如果与 键
关联的初始值不是值列表,则会生成异常。
从字典中删除具有给定键的所有项。
返回字典 Dict
中与 键
关联的值。此函数假设 键
存在于字典 Dict
中,如果 键
不在字典中,则会生成异常。
返回字典 Dict
中所有键的列表。
Dict2
是 Dict1
中所有使 Pred(键, 值)
为 true
的键和值的字典。
在字典 Dict
中搜索键。返回 {ok, 值}
,其中 值
是与 键
关联的值;如果键不在字典中,则返回 error
。
在字典 Dict
的连续键和值上调用 Fun
,以及一个额外的参数 Acc
(累加器的缩写)。Fun
必须返回一个传递给下一次调用的新累加器。如果字典为空,则返回 Acc0
。评估顺序未定义。
将 键
-值
列表 列表
转换为字典 Dict
。
如果字典 Dict
没有元素,则返回 true
,否则返回 false
。
测试 键
是否包含在字典 Dict
中。
在字典 Dict1
的连续键和值上调用 Fun
,以便为每个键返回一个新值。评估顺序未定义。
合并两个字典 Dict1
和 Dict2
,以创建一个新字典。两个字典中的所有 键
-值
对都包含在新字典中。如果一个键出现在两个字典中,则使用该键和两个值调用 Fun
以返回一个新值。merge
可以定义如下,但速度更快
创建一个新字典。
返回字典 Dict
中的元素数量。
将 键
-值
对存储在字典 Dict2
中。如果 键
已经存在于 Dict1
中,则关联的值将替换为 值
。
此函数从字典中返回值并返回一个不包含此值的新字典。如果该键不存在于字典中,则返回 error
。
将字典 Dict
转换为列表表示形式。
通过对值调用 Fun
以获取新值来更新字典中的值。如果 键
不在字典中,则会生成异常。
通过对值调用 Fun
以获取新值来更新字典中的值。如果 键
不在字典中,则将 Initial
存储为第一个值。例如,append/3
可以定义为
将 增量
添加到与 键
关联的值,并存储此值。如果 键
不在字典中,则将 增量
存储为第一个值。
类型
函数
将新的 值
附加到与 键
关联的当前值列表。
另请参阅 注意 部分。
-spec append_list(Key, ValList, Dict1) -> Dict2 when Dict1 :: dict(Key, Value), Dict2 :: dict(Key, Value), ValList :: [Value].
将值列表 值列表
附加到与 键
关联的当前值列表。如果与 键
关联的初始值不是值列表,则会生成异常。
另请参阅 注意 部分。
从字典中删除具有给定键的所有项。
-spec fetch(Key, Dict) -> Value when Dict :: dict(Key, Value).
返回字典 Dict
中与 键
关联的值。此函数假设 键
存在于字典 Dict
中,如果 键
不在字典中,则会生成异常。
另请参阅 注意 部分。
返回字典 Dict
中所有键的列表。
-spec filter(Pred, Dict1) -> Dict2 when Pred :: fun((Key, Value) -> boolean()), Dict1 :: dict(Key, Value), Dict2 :: dict(Key, Value).
Dict2
是 Dict1
中所有使 Pred(键, 值)
为 true
的键和值的字典。
-spec find(Key, Dict) -> {ok, Value} | error when Dict :: dict(Key, Value).
在字典 Dict
中搜索键。返回 {ok, 值}
,其中 值
是与 键
关联的值;如果键不在字典中,则返回 error
。
另请参阅 注意 部分。
-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
。
如果字典 Dict
没有元素,则返回 true
,否则返回 false
。
测试 键
是否包含在字典 Dict
中。
-spec map(Fun, Dict1) -> Dict2 when Fun :: fun((Key, Value1) -> Value2), Dict1 :: dict(Key, Value1), Dict2 :: dict(Key, Value2).
在字典 Dict1
的连续键和值上调用 Fun
,以便为每个键返回一个新值。评估顺序未定义。
-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).
合并两个字典 Dict1
和 Dict2
,以创建一个新字典。两个字典中的所有 键
-值
对都包含在新字典中。如果一个键出现在两个字典中,则使用该键和两个值调用 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
中的元素数量。
将 键
-值
对存储在字典 Dict2
中。如果 键
已经存在于 Dict1
中,则关联的值将替换为 值
。
-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
转换为列表表示形式。
-spec update(Key, Fun, Dict1) -> Dict2 when Dict1 :: dict(Key, Value), Dict2 :: dict(Key, Value), Fun :: fun((Value1 :: Value) -> Value2 :: Value).
通过对值调用 Fun
以获取新值来更新字典中的值。如果 键
不在字典中,则会生成异常。
-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).
-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).