Генерация строки из списка в Erlang - PullRequest
3 голосов
/ 18 ноября 2010

Я пытаюсь создать отформатированную строку на основе списка:

[{"Max", 18}, {"Peter", 25}]

К строке:

"(Name: Max, Age: 18), (Name: Peter, Age: 35)"

Ответы [ 4 ]

8 голосов
/ 18 ноября 2010

Первый шаг - создать функцию, которая может преобразовывать ваш кортеж {Name, Age} в список:

format_person({Name, Age}) ->
    lists:flatten(io_lib:format("(Name: ~s, Age: ~b)", [Name, Age])).

Следующая часть - просто применить эту функцию к каждому элементу в списке, а затем соединить ее вместе.

format_people(People) ->
    string:join(lists:map(fun format_person/1, People), ", ").

Причина сглаживания заключается в том, что io_lib возвращает iolist, а не плоский список.

0 голосов
/ 30 ноября 2010

Если важна производительность, вы можете использовать это решение:

format([]) -> [];
format(List) ->
  [[_|F]|R] = [ [", ","(Name: ",Name,", Age: ",integer_to_list(Age)|")"]
              || {Name, Age} <- List ],
  [F|R].

Но помните, что он возвращает io_list (), поэтому, если вы хотите увидеть результат, используйте lists:flatten/1.Это способ написать очень эффективные манипуляции со строками в Erlang, но использовать его, только если производительность намного важнее, чем удобочитаемость и удобство обслуживания.

0 голосов
/ 18 ноября 2010

это JSON?

используйте некоторые уже написанные модули, например, mochiweb.

0 голосов
/ 18 ноября 2010

Простой, но медленный способ:

string:join([lists:flatten(io_lib:format("(~s: ~p)", [Key, Value])) || {Key,Value} <- [{"Max", 18}, {"Peter", 25}]], ", ").
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...