2009-06-26 57 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])