** Un nouvel ingénieur (8e jour) qui sera une personne en 100 jours **
Comment trier le tableau contenant vos propres classes ... Je suis resté un peu coincé aujourd'hui, alors je vais le laisser comme mémo.
user.rb
class User
attr_accessor :name, :age, :height
def initialize(name, age, height)
@name = name
@age = age
@height = height
end
end
user1 = User.new("foo", 15, 190)
user2 = User.new("bar", 80, 150)
user3 = User.new("baz", 28, 168)
users = [user1, user2, user3]
Créez vos propres classes d'utilisateurs comme celle-ci et placez-les dans un tableau appelé users Pensez à ce type d'utilisateurs aujourd'hui
** Essayez de trier pour le moment **
ruby.rb
users.sort
#Une erreur est survenue
#`sort': comparison of User with User failed (ArgumentError)
Je me fâche comme ci-dessus. Échec de la comparaison des utilisateurs. Vous ne pouvez pas comparer les objets tels qu'ils sont.
Nous comparerons donc par les attributs des objets. Pour ce faire, utilisez sort_by au lieu de la méthode sort. ** Comparer par âge **
ruby.rb
users = users.sort_by{|user|user.age} #ordre croissant
p users.map{|user|"#{user.name},#{user.age},#{user.height}"}
#production["foo,15,190", "baz,28,168", "bar,80,150"]
users = users.sort_by{|user|user.age}.reverse #Ordre décroissant
#production["bar,80,150", "baz,28,168", "foo,15,190"]
J'ai pu trier par les attributs de ma propre classe comme ça. Si vous voulez aller dans l'ordre décroissant, utilisez la méthode inverse pour plus de simplicité. De plus, la méthode sort_by est plus simple à appliquer, donc
ruby.rb
users = users.sort_by(&:height)
Avec cette seule ligne, vous pouvez trier les utilisateurs dans le tableau des utilisateurs par ordre croissant de hauteur. Ruby est incroyable, n'est-ce pas?
C'est tout pour aujourd'hui. Merci d'avoir regardé.
** 92 jours pour devenir ingénieur à part entière **
Recommended Posts