1

キーと値のペアのリストが 2 つあります ( [{key_1, value_1}, ..., {key_n, value_n}])。最初のリストを 2 番目のリストで更新する最良の方法は何ですか? 例えば:

1> extend([{1, "one"}, {2, "too"}], [{2, "two"}, {3, "three"}]).
[{1, "one"}, {2, "two"}, {3, "three"}]

lists:keystore/41つのタプルを更新する とlists:keymerge、キーの重複を削除せずに 2 つのリストをマージするの 2つの類似した関数しか見つかりませんでした。

4

2 に答える 2

2

私は自分で答えを見つけました。Erlang のモジュールは、純粋に並べ替えられたペアorddictのリストを扱います。{key, value}したがって、extend関数は次のように定義できます。

extend(L1, L2) ->
    orddict:merge(fun(_Key, _V1, V2) -> V2 end, L1, L2).

L1とが最初にソートされていない場合L2は、 で orddict に変換できますorddict:from_list/1

于 2013-10-01T15:30:03.023 に答える
0

例えば

extend(L1,L2) -> 
    lists:foldl(fun({K,V},Acc) -> lists:keystore(K,1,Acc,{K,V}) end, L1,L2).

また

extend(L1,L2) ->
    compact(lists:keysort(1,L1++L2),[]).

compact([],Acc) -> lists:reverse(Acc);
compact([{K,_},{K,V}| Rest], Acc) -> compact([{K,V} |Rest],Acc);
compact([X|Rest],Acc) -> compact(Rest,[X|Acc]).
于 2013-10-02T07:25:31.487 に答える