2010-11-21 12 views
3

Ich versuche, eine neue Liste über ein Listenverständnis zu erstellen, möchte aber, dass diese neuen Werte in eine bestehende Liste aufgenommen werden.Erlang: Listenverständnis zu einer bestehenden Liste

Genauer gesagt, ich versuche, eine Zeichenfolge außerhalb des Datums zu erstellen und wird einige Zeichenfolge Formatierung zwischen den Werten (ein Strich -). Die vorhandene Liste wird eine Vorlage sein, wenn Sie mit dem Bindestrich arbeiten. Hier

ist das, was ich bisher:

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

Das Ergebnis sollte in etwa entlang "20101121"

Aber, was ich will, ist "2010-11-21"

Also denke ich über das DateListString-Verständnis "Verständnis" in eine bestehende Liste mit "-" nach dem ersten und zweiten Element.

Alle Vorschläge begleitet mit konkreten Codebeispielen sehr geschätzt.

+0

Sie sind absolut Roberto ... Tut mir leid, dass .. .war nicht die Absicht. Aber ich habe stattdessen auf jede Antwort Punkte gegeben, die ich für gut hielt. Das Akzeptieren des Teils wird nun korrigiert ... –

Antwort

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" 
+0

Gut gemacht Roberto. Konkreter als Damodharan wird es also als Antwort auswählen. –

1

Dies ist eine mögliche Lösung, aber ich fühle, dass es keine elegante Lösung ist. Außerdem verwendet es kein Listenverständnis.

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" 
+0

Danke ... Ich habe gerade mit zipwith nachgesehen und könnte mit ihm gehen, wenn jemand nicht mit einer eleganteren oder Listenverständnislösung kommt –

4

Wenn Sie es wirklich in einer Liste Verständnis wollen, dann könnten Sie wie folgt vorgehen:

Roberto ist eine bessere/effizientere Lösung für dieses Problem, aber im Falle gefragt, wie Sie könnte es mit einem Listenverständnis tun, dies wäre ein Weg.

+1

Ich liebe, wie Mustererkennung interessante Lösungen für Probleme aufdeckt. –

+0

Danke Jeremy ... ja, definitiv interessant zu sehen. Ein Punkt für deine Antwort hinzugefügt. –

+1

Ich würde nicht schreiben, dass die Lösung von Roberto eine effizientere Lösung ist, es sei denn, es ist ein Benchmark, aber io_lib ist wohlbekannt, dass es kein Performance-Champion ist. Ich wette auf Ihre Lösung persönlich, denn stellen Sie sich vor, was io_lib zu tun hat. Sie können die Leistung verbessern, wenn Sie 'lists: flatten/1' in' lists: append/1' ändern. Noch schneller in BEAM sollte "integer_to_list (Year) ++" - "++ integer_to_list (Monat) ++" - "++ integer_to_list (Day)" sein. In Native kann die handwerkliche Lösung besser sein. Und NIF wird natürlich regieren. –

Verwandte Themen