我正在尝试根据不同的属性对一组对象进行排序。其中一些属性我想按升序排序,一些按降序排序。我已经能够按升序或降序排序,但无法将两者结合起来。
这是我正在使用的简单类:
class Dog
attr_reader :name, :gender
DOGS = []
def initialize(name, gender)
@name = name
@gender = gender
DOGS << self
end
def self.all
DOGS
end
def self.sort_all_by_gender_then_name
self.all.sort_by { |d| [d.gender, d.name] }
end
end
然后我可以实例化一些狗以便稍后进行分类。
@rover = Dog.new("Rover", "Male")
@max = Dog.new("Max", "Male")
@fluffy = Dog.new("Fluffy", "Female")
@cocoa = Dog.new("Cocoa", "Female")
然后我可以使用 sort_all_by_gender_then_name 方法。
Dog.sort_all_by_gender_then_name
=> [@cocoa, @fluffy, @max, @rover]
它返回的数组首先包括女性,然后是男性,所有这些都按名称升序排列。
但是如果我想让性别降序,然后名字升序,那么它会首先是男性,然后按名字升序排序。在这种情况下:
=> [@max, @rover, @cocoa, @fluffy]
或者,如果我希望它按性别升序,但名称降序:
=> [@fluffy, @cocoa, @rover, @max]
对数值进行排序时,您可以在前面加上 - 以使其反向排序。但是,我一直无法找到使用字符串执行此操作的方法。任何帮助或想法将不胜感激。谢谢。