From: Eric Hodel Date: 2007-10-07T18:21:54+09:00 Subject: #sort_by and #sort_obj I haven't seen this technique in the wild before. If you have custom sorting using the spaceship: class Something def <=>(other) [@name, @version] <=> [other.name, other.version] end end You can't easily use the more-efficient #sort_by because you'll need to know how to sort Somethings, which involves duplication: somethings.sort_by { |s| [s.name, s.version] } Instead you can add a method that returns the thing to sort by: class Something def sort_obj [@name, @version] end def <=>(other) sort_obj <=> other.sort_obj end end So now using #sort_by is easy: somethings.sort_by { |s| s.sort_obj } I don't know if the name #sort_obj is appropriate, but I'm not coming up with something better. See also: http://blog.segment7.net/articles/2007/10/07/sort_by-and-sort_obj -- Poor workers blame their tools. Good workers build better tools. The best workers get their tools to do the work for them. -- Syndicate Wars