我想要一些帮助。
我有一个用户列表及其发票。可以有许多用户,每个用户可以有很多发票。
所以,我想从[{user, invoice}]
转到[{user, [invoice]}]
。
例如,转换此...
[{user1, invoice11}, {user1, invoice12}, {user2, invoice21}, {user2, invoice22}].
进入这个...
[{user1, [invoice11, invoice12]}, {user2, [invoice21, invoice22]}].
答案 0 :(得分:1)
我使用fold()
创建dict
,然后将其设为列表:
UsersInvoices = [{user1, invoice11}, {user1, invoice12},
{user2, invoice21}, {user2, invoice22}].
dict:to_list(lists:foldl(fun({User, Invoice}, D) ->
dict:append(User, Invoice, D) end,
dict:new(), UsersInvoices)).
答案 1 :(得分:0)
您不需要使用折叠或词典。假设它们按用户排序,您可以执行此操作。它还使列表保持排序。
convert([{U, I}|R])->convert(R,[{U,[I]}]).
convert([], RL)->lists:reverse(RL);
convert([{U, I}|R], [{U,IL}|RL])->convert(R, [{U, [I|IL]}|RL]);
convert([{U1, I}|R], [{U2, IL} |RL])->convert(R, [{U1, [I]}|[{U2, lists:reverse(IL)}|RL]]).