我有元组的列表:元组的名单上使用地图和打印的扁带在二郎山
X = [{"alpha","beta"},{"gamma","theta"}].
我想在使用以下格式打印X作为扁带,io_lib:format("~s", [X])
:
[{"x":"alpha", "y":"beta"}, {"x":"gamma", "y":"theta"}]
如何实现这一目标?我开始使用Map来转换列表。但是我无法将它打印成字符串......(在X上给出了一个未绑定的变量错误)。
我有元组的列表:元组的名单上使用地图和打印的扁带在二郎山
X = [{"alpha","beta"},{"gamma","theta"}].
我想在使用以下格式打印X作为扁带,io_lib:format("~s", [X])
:
[{"x":"alpha", "y":"beta"}, {"x":"gamma", "y":"theta"}]
如何实现这一目标?我开始使用Map来转换列表。但是我无法将它打印成字符串......(在X上给出了一个未绑定的变量错误)。
疯狂地看起来像JSON序列化! 你应该看看rfc4627.erl,因为它几乎完全符合你的要求。
享受绝招:
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)。
尝试这种情况:
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
你应该只是打印这种方式:
[{A,B},{G,T}] = X
io_lib:格式( “[{X:〜S,Y:〜S},{X:〜S,Y:〜S}]”,[A,B,G,T])
如果您可以发布/编辑以添加您的代码片段,这将有所帮助--X上的未绑定错误意味着X没有值,并且X与“x”:“alpha”位之间的差异有点儿一个谜。 如果要以“erlang”格式打印X,请使用〜p指令,而不是〜s。 ~s假定参数是一个字符列表,而不是元组列表。 – 2009-06-26 15:41:45