> Erlang中文手册 > merge/3 合并 2 个字典

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 
    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)).