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