Erlang中文手册(Erldoc.com)  »  dict  »  merge/3
Erlang并发编程 Erlang/OTP设计原理 Erlang/OTP[pdf] Mnesia用户手册[pdf] Erlang完整手册[en] 官网手册[en] 模块列表 方法列表 随机 Erlang中文社区(BBS) 美女图库

dict:merge/3

合并 2 个字典

用法:

merge(Fun, Dict1, Dict2) -> Dict3

内部实现:

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

merge(F, D1, D2) when D1#dict.size < D2#dict.size ->
    fold_dict(fun (K, V1, D) ->
		      update(K, fun (V2) -> F(K, V1, V2) end, V1, D)
	      end, D2, D1);
merge(F, D1, D2) ->
    fold_dict(fun (K, V2, D) ->
		      update(K, fun (V1) -> F(K, V1, V2) end, V2, D)
	      end, D1, D2).

把 2 个字典合并成为一个新的字典,原来字典的键值都会保留下来,如果存在相同的键,则调用合并函数(Fun)处理并返回一个新值。例如下面存在有键相同时,则把值相加:

D1 = dict:from_list([{k1, 1}, {k2, 2}, {k3, 3}]),
D2 = dict:from_list([{k1, 1}, {k2, 2}, {k3, 3}, {k4, 4}]),
MergeFun = fun(_Key, V1, V2) -> V1 + V2 end,
dict:to_list(dict:merge(MergeFun, D1, D2)).
阿里云 - 最高1000元通用代金券立即可用
沪ICP备13037221号-9