我正在尝试根据列表生成格式化字符串:
[{"Max", 18}, {"Peter", 25}]
到一个字符串:
"(Name: Max, Age: 18), (Name: Peter, Age: 35)"
答案 0 :(得分:8)
第一步是创建一个可以将{Name,Age}元组转换为列表的函数:
format_person({Name, Age}) ->
lists:flatten(io_lib:format("(Name: ~s, Age: ~b)", [Name, Age])).
下一部分只是将此函数应用于列表中的每个元素,然后将它们连接在一起。
format_people(People) ->
string:join(lists:map(fun format_person/1, People), ", ").
flatten的原因是io_lib返回一个iolist而不是一个平面列表。
答案 1 :(得分:0)
一种简单但缓慢的方式:
string:join([lists:flatten(io_lib:format("(~s: ~p)", [Key, Value])) || {Key,Value} <- [{"Max", 18}, {"Peter", 25}]], ", ").
答案 2 :(得分:0)
是JSON吗?
使用一些已编写的模块,例如mochiweb。
答案 3 :(得分:0)
如果性能很重要,您可以使用此解决方案:
format([]) -> [];
format(List) ->
[[_|F]|R] = [ [", ","(Name: ",Name,", Age: ",integer_to_list(Age)|")"]
|| {Name, Age} <- List ],
[F|R].
但请记住,它会返回io_list(),因此如果要查看结果,请使用lists:flatten/1
。它是如何在Erlang中编写非常有效的字符串操作的方法,但只有在性能远比可读性和可维护性重要时才使用它。