我試圖基於名單上的格式化字符串:生成字符串從列表中二郎
[{"Max", 18}, {"Peter", 25}]
字符串:
"(Name: Max, Age: 18), (Name: Peter, Age: 35)"
我試圖基於名單上的格式化字符串:生成字符串從列表中二郎
[{"Max", 18}, {"Peter", 25}]
字符串:
"(Name: Max, Age: 18), (Name: Peter, Age: 35)"
第一步是創建一個可以將{Name,Age}元組轉換爲列表的函數:
下一部分簡單地將此函數應用於列表中的每個元素,然後將它們連接在一起。
format_people(People) ->
string:join(lists:map(fun format_person/1, People), ", ").
壓扁的原因是io_lib返回一個iolist而不是一個扁平列表。
你是一羣火人......只是讀了你的回覆,而且它也很堅固...... :) – 2010-11-21 13:35:17
或者你可以在兩個假設下將它縮短爲一行:'string:join([io_lib:format( 「(Name:〜s,Age:〜b)」,[Name,Age])|| {Name,Age} < - People],「,」)'假設是a)'string:join/2'可以在我的測試中使用'io_lib:format/2'輸出,並且b)你的輸出函數可以處理由字符串產生的unflattened嵌套字符列表(他們真的應該這樣做)。 – ndim 2010-11-29 01:09:23
哦,是的,當然,有更短的路。我的意圖是展示一個簡單的實現。 – 2010-11-29 08:23:37
一個簡單但較慢的方法:
string:join([lists:flatten(io_lib:format("(~s: ~p)", [Key, Value])) || {Key,Value} <- [{"Max", 18}, {"Peter", 25}]], ", ").
你爲什麼覺得這很慢? – 2010-11-18 10:51:33
@Peer Stritzinger:因爲所有'string:join/2','lists:flatten/1'和'io_lib:format/2'都不被認爲太有效。 – 2010-11-30 13:52:13
是JSON嗎?
使用例如mochiweb中已經編寫的一些模塊。
如果性能是很重要的,你可以使用此解決方案:
format([]) -> [];
format(List) ->
[[_|F]|R] = [ [", ","(Name: ",Name,", Age: ",integer_to_list(Age)|")"]
|| {Name, Age} <- List ],
[F|R].
但請記住,它返回io_list(),所以如果你想看到的結果,用lists:flatten/1
。如何在Erlang中編寫非常有效的字符串操作,但只有在性能比可讀性和可維護性更重要時才使用它。
你想用字符串做什麼? – Zed 2010-11-18 14:20:33