String 在元组列表上使用Map并在Erlang中将其打印为平面字符串
我有一个元组列表:String 在元组列表上使用Map并在Erlang中将其打印为平面字符串,string,erlang,map,String,Erlang,Map,我有一个元组列表: X = [{"alpha","beta"},{"gamma","theta"}]. 我想使用,io_lib:format(“~s”,[X])以以下格式将X打印为平面字符串: [{"x":"alpha", "y":"beta"}, {"x":"gamma", "y":"theta"}] 我如何做到这一点?我开始使用Map来转换列表。但我无法将其打印为字符串…(在X上给出了一个未绑定的变量错误)。看起来像是JSON序列化! 您应该仔细看看,因为它几乎完全符合您的要求。享受整洁
X = [{"alpha","beta"},{"gamma","theta"}].
我想使用,io_lib:format(“~s”,[X])
以以下格式将X打印为平面字符串:
[{"x":"alpha", "y":"beta"}, {"x":"gamma", "y":"theta"}]
我如何做到这一点?我开始使用Map来转换列表。但我无法将其打印为字符串…(在X上给出了一个未绑定的变量错误)。看起来像是JSON序列化! 您应该仔细看看,因为它几乎完全符合您的要求。享受整洁的技巧:
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"}]
1>X=[{“alpha”,“beta”},{“gamma”,“theta”}]。
2> F=fun(X)->[[$,[124; H][124; T]=[[$,[124;[“{”X\“:\”,A,“\”,“y\”:\”,B,“\”}”][124;{A,B}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]).
然后:
您应该这样打印: [{A,B},{G,T}]=X
io_lib:format(“[{x:~s,y:~s},{x:~s,y:~s}]”,[A,B,G,T])如果您可以发布/编辑以添加有帮助的代码片段-x上的未绑定错误意味着x没有值,并且x和“x”之间的差异:“alpha”位有点神秘。如果您想在“erlang”中打印x格式化,使用~p指令,而不是~s.~s。假定参数是字符列表,而不是元组列表。
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