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