Tri d'un tableau d'objets en Ruby par des attributs de l'objet?
J'ai un tableau d'objets en Ruby on Rails. Je veux trier le tableau par un attribut de l'objet. Est-il possible?
Vous devez vous connecter pour publier un commentaire.
J'ai un tableau d'objets en Ruby on Rails. Je veux trier le tableau par un attribut de l'objet. Est-il possible?
Vous devez vous connecter pour publier un commentaire.
Je recommande d'utiliser sort_by à la place:
Surtout si l'attribut peut être calculé.
Ou un plus concis approche:
objects.sort_by(&:attribute)
objects.sort_by { |obj| obj.attribute.downcase }
sort!
(par exemple, vitesse, etc.)?Oui, à l'aide de
Array#tri!
c'est facile.<=>
? Ce genre d'erreurs en êtes-vous? etc, etc, ad nauseam. En d'autres termes, nous avons besoin de plus de détails que "mais pas de chance pour moi".sort
si vous souhaitez conserver l'original et affecter le résultat à un autre objet; autrement, l'utilisation de la variante,sort!
. En fait,sort
appelssort!
en interne, après la copie de l'objet original.sort!
fonctionnent très bien, et toujours (!) faire la même chose que ce que vous avez écrit.Ordre croissant :
ou
Ordre décroissant :
ou
dans le cas où vous avez besoin de trier par deux attributs, où la première est plus importante que la seconde (ce qui signifie la prise en compte d'arguments seulement si le premier arguments sont égaux), puis vous pouvez faire comme ceci
ou en cas de tableau de tableaux
Vous pouvez faire toute la classe triables par substitution de la <=> méthode:
Maintenant un tableau d'objets de la Personne sera triée sur le nom.
Tableau#tri fonctionne bien, comme affiché ci-dessus:
MAIS, vous devez vous assurer que le
<=>
opérateur est mis en œuvre pour cet attribut. Si c'est un Rubis type de données natif, ce n'est pas un problème. Sinon, écrivez-vous possédez de mise en œuvre qui renvoie -1 si a < b, 0 si elles sont égales, et 1 si a > b.Plus élégant
objects.sort_by(&:attribute)
, vous pouvez ajouter sur un.reverse
si vous avez besoin pour passer la commande.Oui ses possible
http://ariejan.net/2007/01/28/ruby-sort-an-array-of-objects-by-an-attribute/
sort
lorsque vous effectuez le tri des objets qui ne peuvent pas être comparés directement. Si vous devez accéder à des attributs ou faire un calcul pour obtenir la valeur de comparer l'utilisationsort_by
. Il sera beaucoup plus rapide.