ERlang - пытается найти длину составляющих списка - PullRequest
2 голосов
/ 13 августа 2010

думаю, уже поздно, и я новичок, просто нужно немного помочь ..

Я пытаюсь найти длину списка .. НО НЕ самих списков, а длину значений внутри ..

Я беру что-то вроде:

   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>>...]

Это, конечно, пример того, как будет выглядеть исходный Другой (Не правильные значения преобразования). Так что во всех значениях есть самые основные двоичные данные.

Тогда я мог бы просто повторить подсчет каждого << _ >> и определить общую длину сообщения.

Надеюсь, я был достаточно ясен, чтобы найти решение.

Спасибо всем за помощь, GN

Ответы [ 2 ]

2 голосов
/ 13 августа 2010

iolist_size/1 - это то, что вы ищете.

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 .: Почему ваши данные в качестве примера имеют этот лишний символ? ; -)

1 голос
/ 13 августа 2010

Если все, что вы пытаетесь сделать, это найти длину всей структуры, я бы попробовал что-то вроде этого:

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 приблизит вас к тому, что вам нужно, а затем просто назовите размер. (На самом деле, это может быть лучше, чем моя первая попытка.)

1> erlang:list_to_binary([<<"366">>,0,<<"155">>,"209.191"]).
<<51,54,54,0,49,53,53,50,48,57,46,49,57,49>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...