有效的键/值列表在erlang中合并

dan*_*kin 2 algorithm erlang list

我有几个键/值propper列表,像这样:

    L1 = [{k1, 1}, {k2, 2}, ... {k32, 32}],
    L2 = [{k32, 0.1}, {k31, 0.2}, ... {k1, 0.32}].
Run Code Online (Sandbox Code Playgroud)

什么是按键合并的有效方法?目前我喜欢这样:

    MergeFun = fun(_, X, Y) -> X+Y end,
    D1 = dict:from_list(L1),
    D2 = dict:from_list(L2),
    Res = dict:to_list(dict:merge(MergeFun, D1, D2)).
Run Code Online (Sandbox Code Playgroud)

但那很慢.我假设输入列表不是那么大,也许32-64个元素和元素可以按任何顺序排列.

Ric*_*rdC 6

使用orddict模块,该模块明确地用于对列表:

orddict:merge(fun(_,X,Y) - > X + Y end,orddict:from_list(L1),orddict:from_list(L2)).

更好的是,如果确保L1和L2始终按键排序,则在合并之前不需要调用from_list(L).