rretzbach wrote: > 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? > > > I'm guessing it has to do with Enumerable#sort_by doing the key caching thing? -Justin