さまざまな属性に基づいてオブジェクトの配列をソートしようとしています。昇順で並べ替えたい属性と、降順で並べ替えたい属性があります。昇順または降順で並べ替えることができましたが、2 つを組み合わせることができませんでした。
ここに私が取り組んでいる単純なクラスがあります:
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]
数値を並べ替えるときは、先頭に - を付けて逆順に並べ替えることができます。ただし、文字列でこれを行う方法を見つけることができませんでした。ヘルプやアイデアをいただければ幸いです。ありがとう。