Wer mit Arrays arbeitet und diese sortieren möchte, kennt sicherlich die sort-Methode - gibts da eigentlich noch was besseres zum sortieren? - von Ruby. Aber irgendwann muß man auch mal "komplexere" Ausrdücke sortieren => eine Anpassung von sort ist notwendig. Ich musste eine Anpassung beim einlesen von Dateinamen machen. Die Dateinamen werden so alphabetisch und nach der Länge sortiert. Das ist aber noch keine "perfekte" Lösung :-).So sieht der sort-Teil aus:
filenames.sort! { |file1, file2|
diff = file1.length - file2.length
if diff == 0
file1 <=> file2
else
diff
end
}
Mit dem <=> kann man die Reihenfolge natürlich auch umkehren.
Mehr zum Thema "Sorting for Humans" gibts auf Coding Horror (via Stefan Tilkov).
An die Ruby-Cracks: Zerreißt meinen Code ruhig, ich will ja was dazulernen :-)!
Comments (3)
filenames.sort! { |file1, file2| file1.length file2.length }
# :-)
Posted by Stefan Tilkov | January 8, 2008 9:15 PM
Posted on January 8, 2008 21:15
Irgendwie wird das Äquivalentzeichen-Zeichen im Comment nicht angezeigt 0_o!
Posted by Tim | January 8, 2008 9:33 PM
Posted on January 8, 2008 21:33
# jetzt aber!
filenames.sort! { |file1, file2| file1.length file2.length }
Posted by Stefan Tilkov | January 9, 2008 6:45 AM
Posted on January 9, 2008 06:45