J'ai une gamme d'objets créés à partir d'une classe personnalisée. La classe personnalisée a des attributs et je souhaite trier le tableau par l'un de ces attributs? Existe-t-il un moyen facile de mettre en œuvre cela sur ruby ou de le coder à partir de zéro?
Exemple: P>
class Example
attr_accessor :id, :number
def initialize(iid,no)
@id = iid
@number = no
end
end
exarray = []
1000.times do |n|
exarray[n] = Example.new(n,n+5)
end
3 Réponses :
Essayez:
exarray.sort { |a, b| a.number <=> b.number }
Utilisez toujours Sort_By au lieu de trier si vous le pouvez. Et vous pouvez habituellement.
@glen McDonald: Une petite explication pourrait être gentille. Deux avantages de trier_by code> sont-ils plus courts et plus concis et qu'il comprend une transformation implicite de Schwartzian pour éviter de calculer des choses coûteuses pour chaque comparaison dans le tri.
Si vous souhaitez encapsuler cette logique à l'intérieur de la classe, implémentez une méthode maintenant, vous pouvez appeler : p> <=> code> sur votre classe, vous pouvez dire à RUBY comment comparer des objets de ce type. Voici un exemple de base: exarray.sort code> et il "fonctionne" "fonctionner" p>