【问题标题】:ERlang - Trying to find LENGTH of constituents of ListERlang - 试图找到列表成分的长度
【发布时间】:2011-03-29 08:16:57
【问题描述】:

估计时间不早了,我是初学者,只需要一点帮助..

我试图找到一个列表的长度.. 但不是列表本身的长度,而是其中值的长度..

我采取类似的方式:

   Other = [<<"366">>,0,
             <<1>>,
             <<"344">>,<<"Really"
             <<1>>,
             <<"989">>,<<"NotReally">>
             <<1>>,
             <<"345">>,4,
             <<1>>,
             <<"155">>,"209.191"]

我真的很想先将 Other 转换为其 RAW 组成二进制文件

例子:

Other = [<<3>>,<<4>>,<<7>>,<<56>>,<<45>>,<<56>>...]

当然,这是原始 Other 的外观示例(转换值不正确)。这样里面所有的值都是最基本的二进制数据。

然后我可以简单地迭代计算每个 > 并确定总消息长度。

希望我足够清楚以找到解决方案。

感谢大家的帮助,GN

【问题讨论】:

    标签: erlang


    【解决方案1】:

    如果您只想找到整个结构的长度,我会尝试这样的事情:

    my_length(X) when is_integer(X) -> 1;
    my_length(X) when is_binary(X) -> erlang:size(X);
    my_length(Lst) when is_list(Lst) ->
        lists:sum([my_length(X) || X <- Lst]).
    

    如果您真的想构建一个平面版本的结构,那么 erlang:list_to_binary 可以让您非常接近您的需要,然后只需调用 size 即可。 (其实这可能比我第一次尝试要好。)

    1> erlang:list_to_binary([<<"366">>,0,<<"155">>,"209.191"]).
    <<51,54,54,0,49,53,53,50,48,57,46,49,57,49>>
    

    【讨论】:

      【解决方案2】:

      iolist_size/1 就是你要找的。​​p>

      1> iolist_size([<<"366">>,0,<<1>>,<<"344">>,<<"Really">>,<<1>>,<<"989">>,<<"NotReally">>,<<1>>,<<"345">>,4,<<1>>,<<"155">>,"209.191"]).                 
      43
      2> v(1) - 1.
      42
      

      P.S.:为什么你的示例数据有这个多余的字符? ;-)

      【讨论】:

        猜你喜欢
        • 2017-06-23
        • 2014-06-29
        • 1970-01-01
        • 2022-07-23
        • 2015-03-23
        • 2020-12-09
        • 1970-01-01
        • 2017-10-01
        • 2020-04-14
        相关资源
        最近更新 更多