Halihallo
ich moechte im u.g. code ein array nach "date" sortieren, was auch klappt. nun moechte ich die sortierung noch nach "time" erweitern, soll heissen: erst nach date sortieren und gleichzeitig auch nach "time" wenn mehrere "date" eintraege gleich sind?
wie kann man das denn am geschickesten machen?
Ich würde die Date und Time Angaben in eine packen: UNIX-Timestamp. Dann kannst du nummerisch sortieren (ist IMO sogar viel schneller, als Stringoperationen) und du hast gleich nach Datum _UND_ Zeit sortiert.
Moin Moin !
Für's Archiv:
In diesem speziellen Fall würde ich Dir zustimmen, C-Time oder Vergleichbares ist wesentlich effektiver.
Wenn Du aber etwas exotischere Anforderungen hast (erst nach Name (case-insensitiv), dann nach Vorname (case-sensitiv), dann nach Datum, dann nach absteigender Größe), kommst Du nicht um eine etwas aufwändigere Vergleichsfunktion herum:
my @unsorted=(
{ name => 'Demo', firstname => 'bla', date => 12345, size => 42 },
...
);
sub by_name_date_and_size
{
return (
lc($a->{'name'}) cmp lc($b->{'name'}) # name, case-ins.
||
$a->{'firstname'} cmp $b->{'firstname'} # firstname, case-sens
||
$a->{'date'} <=> $b->{'date'} # datum, numerisch
||
$b->{'size'} <=> $a->{'size'} # size, numerisch, absteigend
);
}
my @sorted=sort by_name_date_and_size @unsorted;
Alles aus dem Kopf frei nach irgendeinem guten Perl-Buch (oder sogar der Doku ?).
Alexander