erlang - 列表到元组列表的转换

标签 erlang

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

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

我创造了记录

-record(acc, {previous, counter, tuples}).

重新定义

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

但是我遇到了一些麻烦

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

最佳答案

如果您反向构建答案 (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]).

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

关于erlang - 列表到元组列表的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5214821/

相关文章:

machine-learning - Erlang 中的感知器在训练后不学习

Erlang容错应用程序: PA or CA of CAP?

erlang - 在 Elixir/Erlang 中,哪个端口用于 `Node.connect` ?

macros - 如何更改 "-define"Erlang 属性(宏定义)的值?

xml - Erlang 使用 xmerl 在 <?xml> 标签中设置编码

erlang - Erlang VM (BEAM) 是如何构造列表的?

erlang - erlang spawn_monitor 的正确使用

erlang - 生成函数而不导出它们

erlang - 在 mnesia 集群中,查询哪个节点?

floating-point - 如何从二进制文件中读取单精度 float 并转换为 Erlang float ?