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