Sorting an array of objects in Ruby by object attribute?

后端 未结 9 685
渐次进展
渐次进展 2021-01-30 02:00

I have an array of objects in Ruby on Rails. I want to sort the array by an attribute of the object. Is it possible?

9条回答
  •  醉梦人生
    2021-01-30 02:33

    You can make any class sortable by overriding the <=> method:

    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
    

    Now an array of Person objects will be sortable on last_name.

    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" ]
    

提交回复
热议问题