erlang 如何在列表中存储整数

rxztt3cl  于 2022-12-08  发布在  Erlang
关注(0)|答案(3)|浏览(203)

我试图分离一个整数数组来计算有多少个重复的数字。
对于此输入[10, 20, 20, 10, 10, 30, 50, 10, 20],我将收到以下输出:

#{10=>"\n\n\n\n",20=>[20,20],30=>[30],50=>"2"}

问题

我想知道如何生成以下输出

#{10=>[10,10,10,10],20=>[20,20],30=>[30],50=>[50]}

我用来生成Map输出的函数是:

%% Next: number
%% Acc: map
separate_socks(Next, Acc) ->
    KeyExists = maps:is_key(Next, Acc),

    case KeyExists of
        true ->
            CurrentKeyList = maps:get(Next, Acc),
            maps:update(Next, [Next | CurrentKeyList], Acc);
        false -> maps:put(Next, [Next], Acc)
    end.
hivapdat

hivapdat1#

可以使用shell:strings/1函数来处理数字显示为字符的问题。当调用shell:strings(true)时,数字将显示为字符:

1> shell:strings(true).
true
2> [10,10,10].
"\n\n\n"

调用shell:strings(false)将导致数字打印为数字:

3> shell:strings(false).
true
4> [10,10,10].
[10,10,10]
3bygqnnd

3bygqnnd2#

Your output is actually correct. The ascii value for \n is 10. There is no native string data type in erlang. A string is nothing by a list of values. erlang:is_list("abc") would return true.
Try [1010, 1020, 1020, 1010, 1010, 1030, 1050, 1010, 1020] as input. It should display all numbers.

3z6pesqy

3z6pesqy3#

您也可以使用io:format()来格式化输出:

1> M = #{10=>[10,10,10,10],20=>[20,20],30=>[30],50=>[50]}.
#{10 => "\n\n\n\n",20 => [20,20],30 => [30],50 => "2"}

2> io:format("~w~n", [M]).
#{10=>[10,10,10,10],20=>[20,20],30=>[30],50=>[50]}
ok

w

使用标准语法写入数据。这是用来输出Erlang词汇。

相关问题