8
votes

Tri par les propriétés des éléments de la matrice en rubis

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


0 commentaires

3 Réponses :


0
votes

Essayez:

exarray.sort { |a, b| a.number <=> b.number }


2 commentaires

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 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.



17
votes

Sort_by est probablement l'option la plus courte

exarray.sort_by &:number


0 commentaires

2
votes

Si vous souhaitez encapsuler cette logique à l'intérieur de la classe, implémentez une méthode <=> sur votre classe, vous pouvez dire à RUBY comment comparer des objets de ce type. Voici un exemple de base: xxx

maintenant, vous pouvez appeler exarray.sort et il "fonctionne" "fonctionner"


:


0 commentaires