On 8 Mrz., 08:09, "Farrel Lifson" <farrel.lif... / gmail.com> wrote:
> On 08/03/07, Justin Collins <colli... / seattleu.edu> wrote:
>
>
>
>
>
> > Farrel Lifson wrote:
> > > On 08/03/07, Jason Burgett <jas... / gmail.com> 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- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -

I don't understand, can someone please explain this loss of speed?