Erlang: понимание списка для существующего списка - PullRequest
3 голосов
/ 21 ноября 2010

Я пытаюсь создать новый список с помощью понимания списка, но хочу, чтобы эти новые значения были включены в существующий список.

Более конкретно, я пытаюсь создать строку из даты, и у меня будет некоторое форматирование строки между значениями (тире -). Существующий список будет шаблоном, если вы будете использовать тире.

Вот что у меня есть:

{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, «понимающем» существующий список с «-» после первого и второго элемента.

Любые предложения, сопровождаемые конкретными примерами кода, приветствуются.

Ответы [ 3 ]

7 голосов
/ 21 ноября 2010
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"
4 голосов
/ 23 ноября 2010

Если вы действительно хотите это в понимании списка, вы можете сделать следующее:

{Date, Time} = erlang:universaltime().
DateList = tuple_to_list(Date).
DateListString = [ [$- | integer_to_list(X)] || X <- DateList ].
[_ | DateListStringConcatenate] = lists:flatten(DateListString).

Roberto's - лучшее / более эффективное решение для этого, но в случае, если вам интересно, как вы могли бы сделать это спонимание списка это будет одним из способов.

1 голос
/ 21 ноября 2010

Это возможное решение, но я чувствую, что оно не элегантное. Кроме того, он не использует понимание списка.

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"
...