在Erlang中从List生成字符串

时间:2010-11-18 05:36:35

标签: string list erlang

我正在尝试根据列表生成格式化字符串:

[{"Max", 18}, {"Peter", 25}]

到一个字符串:

"(Name: Max, Age: 18), (Name: Peter, Age: 35)"

4 个答案:

答案 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中编写非常有效的字符串操作的方法,但只有在性能远比可读性和可维护性重要时才使用它。