Ich habe eine Reihe von Objekten in Ruby on Rails. Ich möchte das Array nach einem Attribut des Objekts sortieren. Ist es möglich?
128
Ich empfehle stattdessen sort_by zu verwenden:
objects.sort_by {|obj| obj.attribute}
Besonders wenn Attribut berechnet werden kann.
Oder ein prägnanterer Ansatz:
objects.sort_by(&:attribute)
objects.sort_by(&:attribute)
objects.sort_by { |obj| obj.attribute.downcase }
sort!
(z. B. Geschwindigkeit usw.) ist?Ja,
Array#sort!
das ist einfach.quelle
<=>
? Welche Art von Fehlern bekommen Sie? etc, etc, ad nauseum. Mit anderen Worten, wir brauchen mehr Details als "aber kein Glück für mich".sort
Sie diese Option, wenn Sie das Original beibehalten und das Ergebnis einem anderen Objekt zuweisen möchten. Andernfalls verwenden Sie die In-Place-Variantesort!
. In der Tat,sort
ruftsort!
intern, nachdem das ursprüngliche Objekt zu kopieren.sort!
funktioniert und immer (!) Das Gleiche tut, was Sie geschrieben haben.Aufsteigende Reihenfolge:
oder
Absteigende Reihenfolge :
oder
quelle
Wenn Sie nach zwei Attributen sortieren müssen, wobei das erste wichtiger als das zweite ist (dh, zweite Argumente werden nur berücksichtigt, wenn die ersten Argumente gleich sind), können Sie dies tun
oder im Falle eines Arrays von Arrays
quelle
Sie können jede Klasse sortierbar machen, indem Sie die <=> -Methode überschreiben:
Jetzt kann ein Array von Personenobjekten nach Nachname sortiert werden.
quelle
Array # sort funktioniert gut, wie oben angegeben:
ABER Sie müssen sicherstellen, dass der
<=>
Operator für dieses Attribut implementiert ist. Wenn es sich um einen nativen Ruby-Datentyp handelt, ist dies kein Problem. Andernfalls schreiben Sie eine eigene Implementierung, die -1 zurückgibt, wenn a <b, 0, wenn sie gleich sind, und 1, wenn a> b.quelle
Eleganter
objects.sort_by(&:attribute)
können Sie eine hinzufügen,.reverse
wenn Sie die Reihenfolge ändern müssen.quelle
Ja es ist möglich
http://ariejan.net/2007/01/28/ruby-sort-an-array-of-objects-by-an-attribute/
quelle
quelle
sort
wenn Sie Objekte sortieren, die nicht direkt verglichen werden können. Wenn Sie auf Attribute zugreifen oder eine Berechnung durchführen müssen, um den zu vergleichenden Wert zu erhaltensort_by
. Es wird viel schneller sein.