From: Farrel Lifson Date: 2007-03-08T16:09:37+09:00 Subject: Re: Sorting objects... On 08/03/07, Justin Collins wrote: > Farrel Lifson wrote: > > On 08/03/07, Jason Burgett wrote: > >> I have a series of objects in an array. Each object corresponds to an > >> application and has several attributes. For instance I can call: > >> > >> @application.name > >> @application.icon > >> @application.ranking > >> > >> "ranking" is always an integer. So if I have an array of these objects, > >> say, @allApplications how do I sort using each application's ranking > >> (@application.ranking)? > >> > > > > applications.sort_by{|object| object.ranking} > > > > Another way would be to add a <=> method > > class Application > def <=> other > self.ranking <=> other.ranking > end > end > > -Justin > > Using only <=> does have some speed consequences: require 'benchmark' srand class Application attr_reader :ranking def initialize @ranking = rand end def <=>(other) @ranking <=> other.ranking end end applications = Array.new(1000000){Application.new} Benchmark.bm do |bmark| bmark.report("Sort") { applications.sort } bmark.report("Sort By") {applications.sort_by {|o| o.ranking}} end C:\Documents and Settings\flifson\Desktop>ruby sort_test.rb user system total real Sort 20.782000 0.031000 20.813000 ( 20.844000) Sort By 6.687000 0.000000 6.687000 ( 6.687000) Farrel