dict:merge/3
合并 2 个字典
用法:
1 | merge( Fun , Dict1 , Dict2 ) -> Dict3 |
内部实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | -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)处理并返回一个新值。例如下面存在有键相同时,则把值相加:
1 2 3 4 | 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 )). |