Thread Dateisortierung
(39 answers)
Opened by IceRage at 2012-02-04 02:17 2012-02-04T13:27:42 GUIfreund das ist ziemlich sinnfrei. zunächst einmal braucht man eine schwartzsche transformation nicht, nur um "$directory/$_" zu vergleichen. das dürfte im direkten vergleich genauso schnell sein. wenn man also die ST nicht sowieso anwendet, kann man sie hier weglassen. zweitens vergleichst du in sort $a und $b, aber $a und $b sind array-referenzen, da wirst du also eher was zufälliges rausbekommen. drittens ist es wohl egal, ob man "$dir/$_" vergleicht oder $_. das voranstellen von $dir hat ja keinen einfluss auf die sortierung, da $dir ja immer gleich ist. Quote warum das? Code (perl): (dl
)
1 2 3 4 5 6 7 8 # verzeichnis/datei, änderungsdatum my @files = map { $_->[2] } sort { $b->[0] <=> $a->[0] or $b->[1] <=> $a->[1] } map { [-d "$dir/$_" || 0, -M "$dir/$_", $_] } readdir $dh; in die arrayref wird geschrieben: -d: ob directory (dann 1) oder nicht (0) -M: wie lange die letzte änderung her ist und der dateiname selbst in sort wird dann der erste eintrag verglichen, d.h. verzeichnisse kommen immer zuerst. danach wird nach änderungsdatum verglichen. oder was immer man möchte. Code (perl): (dl
)
1 2 3 4 5 6 7 8 # verzeichnis/datei, alphanumerisch my @files = map { $_->[1] } sort { $b->[0] <=> $a->[0] or $b->[1] cmp $a->[1] } map { [-d "$dir/$_" || 0, $_] } readdir $dh; mit sort kann man ziemlich vieles anstellen. der code, den man da schreibt, liefert einfach nur -1, 0 oder 1 zurück, das ist alles, was sort() braucht. warum also nicht zwei vergleiche oder mehr verknüpfen? Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |