2009-06-26 25 views
2

我有元组的列表:元组的名单上使用地图和打印的扁带在二郎山

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

我想在使用以下格式打印X作为扁带,io_lib:format("~s", [X])

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

如何实现这一目标?我开始使用Map来转换列表。但是我无法将它打印成字符串......(在X上给出了一个未绑定的变量错误)。

+1

如果您可以发布/编辑以添加您的代码片段,这将有所帮助--X上的未绑定错误意味着X没有值,并且X与“x”:“alpha”位之间的差异有点儿一个谜。 如果要以“erlang”格式打印X,请使用〜p指令,而不是〜s。 ~s假定参数是一个字符列表,而不是元组列表。 – 2009-06-26 15:41:45

回答

2

疯狂地看起来像JSON序列化! 你应该看看rfc4627.erl,因为它几乎完全符合你的要求。

2

享受绝招:

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)。

0

尝试这种情况:

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 
0

你应该只是打印这种方式:

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

io_lib:格式( “[{X:〜S,Y:〜S},{X:〜S,Y:〜S}]”,[A,B,G,T])