前提・実現したいこと
Rubyにて、ハッシュの中身のソートを以下のコードでは
def <=> otherのメソッドを用いて行っているのですが、
ここで何をやっているのか良く分かりません。
疑問点
・def <=> other
1.メソッド名を指定する箇所なのに、なぜ<=>演算子を使用しているのか?
2.ここでのselfとotherはなんのことか。
・employees.sort!
3.sortメソッドを使用しているのに、
ソートされず上記メソッドがなぜ必要になるのかが不明。
該当のコード
Ruby
1class Employee 2 attr_reader :id 3 attr_accessor :name 4 def initialize id,name 5 @id = id 6 @name = name 7 end 8 9 def to_s 10 return "#{@id}:#{@name}" 11 end 12 13 #該当のコード 14 def <=> other 15 return self.id <=> other.id 16 end 17 18end 19 20employees = [] 21employees << Employee.new("3","Tanaka") 22employees << Employee.new("1","Suzuki") 23employees << Employee.new("2","Sato") 24employees.sort! 25employees.each do |employ| 26 puts employ 27end 28
試したこと
補足情報(FW/ツールのバージョンなど)
ruby 2.6.3
> 3.sortメソッドを使用しているのに、
ソートされず上記メソッドがなぜ必要になるのかが不明
「sort! のかわりに sort メソッドを使用した場合、ソートされないのはなぜか?」ということですか?
いいえ。
Rubyには、標準の機能でsortメソッドが備わっており、
素直にそれを使用すれば、ハッシュが配列されると認識しております。
def <=> otherの記述を完全に理解していないのですが、
おそらくソートと同じようなメソッドをここで自作しようとしているのだと認識しています。
なぜわざわざ、「sort」と「def <=> other」の2つの
同じ処理の記述を繰り返しているのかが、
理解できません。
回答4件
あなたの回答
tips
プレビュー