<=>でソートされる順番を定義したときに、同値だった場合のさらなるソート順序を定義したい
例えば、名前と給与を持つEmployee
というクラスを定義し、これが基本的にsalary
でソートされるように、下のように実装したとします。
class Employee < Struct.new(:name, :salary)
def <=>(other)
self.salary <=> other.salary
end
end
このとき、
employees = [Employee.new('foo', 100000),
Employee.new('bar', 150000),
Employee.new('esehara', 100000)]
employees.sort.each do |people|
puts "名前: #{people.name} 給与: #{people.salary}円"
end
を実行した場合、出力は下のようになります:
名前: foo 給与: 100000円
名前: esehara 給与: 100000円
名前: bar 給与: 150000円
このとき、salary
が同値だった場合、name
のアルファベット順で並べたい(この場合ですと同じ給与である二人を、esehara
-> foo
で並べたい)とした場合、<=>
のオペレーター部分、あるいは他の場所にどのようなコードを書き足すべきなのでしょうか?