Используя Map в списке кортежей и распечатайте его в виде плоской строки в Erlang - PullRequest
2 голосов
/ 26 июня 2009

У меня есть список кортежей:

X = [{"alpha","beta"},{"gamma","theta"}].

Я хочу напечатать X в виде плоской строки, используя io_lib:format("~s", [X]) в следующем формате:

[{"x":"alpha", "y":"beta"}, {"x":"gamma", "y":"theta"}]

Как мне этого добиться? Я начал использовать карту для преобразования списка. Но я не смог напечатать его как строку ... (выдал ошибку несвязанной переменной на X).

Ответы [ 4 ]

2 голосов
/ 27 июня 2009

Наслаждайтесь аккуратным трюком:

1> X = [{"alpha","beta"},{"gamma","theta"}].
2> F = fun(X) -> [[$,|H]|T] = [[$,|["{\"x\":\"",A,"\", \"y\":\"",B,"\"}"]] || {A,B} <- X], [$[,[H|T],$]] end.
#Fun<erl_eval.6.111823515>
3> io:format("~s~n", [F(X)]).
[{"x":"alpha", "y":"beta"},{"x":"gamma", "y":"theta"}]

Обратите внимание, что все строковые операции, которые я выполняю внутри F, являются O (1).

2 голосов
/ 26 июня 2009

Яростно выглядит как сериализация JSON! Вы должны взглянуть на rfc4627.erl , так как он делает почти то, что вы хотите.

0 голосов
/ 26 марта 2012

Вы должны просто напечатать это так:

[{A, B}, {G, T}] = X

io_lib: format ("[{x: ~ s, y: ~ s}, {x: ~ s, y: ~ s}]", [A, B, G, T])

0 голосов
/ 26 октября 2009

Попробуйте это:

tuplelist_to_string(L) ->
    tuplelist_to_string(L,[]).

tuplelist_to_string([],Acc) ->
    lists:flatten(["[",
           string:join(lists:reverse(Acc),","),
           "]"]);
tuplelist_to_string([{X,Y}|Rest],Acc) ->
    S = ["{\"x\":\"",X,"\", \"y\":\"",Y,"\"}"],
    tuplelist_to_string(Rest,[S|Acc]).

Тогда:

1> X = [{"alpha","beta"},{"gamma","theta"}].
[{"alpha","beta"},{"gamma","theta"}]
2> io:format("~s~n",[test:tuplelist_to_string(X)]).
[{"x":"alpha", "y":"beta"},{"x":"gamma", "y":"theta"}]
ok
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...