列表到元组转换列表

ДМИ*_*КОВ 2 erlang

我想转换[z,z,a,z,z,a,a,z][{z,2},{a,1},{z,2},{a,2},{z,1}].我该怎么做?

所以,我需要积累前一个值,它的计数器和元组列表.

我创造了纪录

-record(acc, {previous, counter, tuples}).
Run Code Online (Sandbox Code Playgroud)

重新定义

listToTuples([]) -> [];
listToTuples([H | Tail]) -> 
    Acc = #acc{previous=H, counter=1},
    listToTuples([Tail], Acc).
Run Code Online (Sandbox Code Playgroud)

但后来我遇到了麻烦

listToTuples([H | Tail], Acc) ->   
    case H == Acc#acc.previous of
        true  ->
        false ->
    end.
Run Code Online (Sandbox Code Playgroud)

小智 8

如果你反过来建立你的答案(Acc),那么前一个将是该列表的头部.

这是我怎么做的 -

list_pairs(List) -> list_pairs(List, []).

list_pairs([], Acc) -> lists:reverse(Acc);
list_pairs([H|T], [{H, Count}|Acc]) -> list_pairs(T, [{H, Count+1}|Acc]);
list_pairs([H|T], Acc) -> list_pairs(T, [{H, 1}|Acc]).
Run Code Online (Sandbox Code Playgroud)

(我希望现在有人会使用单行列表理解版本...)


Mag*_*ist 5

我会继续在反向建立名单的道路上.注意第一行上的X匹配模式.

F = fun(X,[{X,N}|Rest]) -> [{X,N+1}|Rest];
       (X,Rest)         -> [{X,1}|Rest] end.

lists:foldr(F,[],List).
Run Code Online (Sandbox Code Playgroud)