我正在尝试通过列表推导创建新列表,但希望这些新值包含在现有列表中。
更具体地说,我尝试在日期之外创建一个字符串,并且在值之间会有一些字符串格式(短划线 - )。如果您使用短划线,现有列表将成为模板。
这是我到目前为止所做的:
{Date, Time} = erlang:universaltime().
DateList = tuple_to_list(Date).
DateListString = [ integer_to_list(X) || X < DateList ].
DateListStringConcatenate = lists:flatten(DateListString).
结果应该是一致的 “20101121”
但是,我想要的是 “2010-11-21”
所以我在考虑DateListString理解“理解”在第一个和第二个元素之后带有“ - ”的现有列表。
任何带有具体代码示例的建议都非常赞赏。
答案 0 :(得分:7)
1> {{Y,M,D},_} = erlang:universaltime().
{{2010,11,21},{16,42,56}}
2> lists:flatten(io_lib:format("~p-~p-~p", [Y,M,D])).
"2010-11-21"
答案 1 :(得分:4)
如果您真的想要列表理解,那么您可以执行以下操作:
{Date, Time} = erlang:universaltime().
DateList = tuple_to_list(Date).
DateListString = [ [$- | integer_to_list(X)] || X <- DateList ].
[_ | DateListStringConcatenate] = lists:flatten(DateListString).
罗伯托是一个更好/更有效的解决方案,但如果你想知道如何通过列表理解这样做,这将是一种方式。
答案 2 :(得分:1)
这是一个可能的解决方案,但我觉得它不是一个优雅的解决方案。此外,它不使用列表理解。
1> {Date, Time} = erlang:universaltime().
{{2010,11,21},{14,51,23}}
2> DateList = tuple_to_list(Date).
[2010,11,21]
3> DateListString = lists:zipwith(fun(X,Y) -> integer_to_list(X) ++ Y end, DateList, ["-","-",""]).
["2010-","11-","21"]
4> DateListStringConcatenate = lists:flatten(DateListString).
"2010-11-21"