J'ai un tableau d'objets en Ruby on Rails. Je veux trier le tableau par un attribut de l'objet. Est-ce possible ?
Réponses
Trop de publicités?
Scott
Points
2453
Konrad Rudolph
Points
231505
Oui, en utilisant Array#sort!
C'est facile.
myarray.sort! { |a, b| a.attribute <=> b.attribute }
shiva kumar
Points
10174
bumbu
Points
442
Si vous avez besoin de trier par deux attributs, où le premier est plus important que le second (ce qui signifie que le second argument n'est pris en compte que si le premier est égal), vous pouvez procéder comme suit
myarray.sort{ |a,b| (a.attr1 == b.attr1) ? a.attr2 <=> b.attr2 : a.attr1 <=> b.attr1 }
ou dans le cas d'un tableau de tableaux
myarray.sort{ |a,b| (a[0] == b[0]) ? a[1] <=> b[1] : a[0] <=> b[0] }
user1182000
Points
736
Vous pouvez rendre n'importe quelle classe triable en surchargeant la méthode <=> :
class Person
attr_accessor :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def <=>(other)
@last_name + @first_name <=> other.last_name + other.first_name
end
end
Maintenant, un tableau d'objets Personne sera triable sur le nom de famille.
ar = [Person.new("Eric", "Cunningham"), Person.new("Homer", "Allen")]
puts ar # => [ "Eric Cunningham", "Homer Allen"] (Person objects!)
ar.sort!
puts ar # => [ "Homer Allen", "Eric Cunningham" ]
- Réponses précédentes
- Plus de réponses