« Return to Thread: Help required on sorting

Re: Help required on sorting

by Joel VanderWerf :: Rate this Message:

Reply to Author | View in Thread

David A. Black wrote:

> Hi --
>
> On Thu, 9 Jul 2009, Dipti Iyengar wrote:
>
>> Hi All,
>>
>>   I ve to sort risks by "High" "Medium" "Low" "Info" and "Safe"
>>
>> When I sort in the model it sorts in the alphabetical order which is not
>> what i want.
>>
>> Tried adding a position to each of it as High -> 1 Medium -> 2 etc. and
>> then sorting by the position....but seems like too much of work
>>
>> Any quicker way to do this?
>
> You could do:
>
>   LEVELS = %w{ High Medium Low Info Safe }
>
>   sorted = risks.sort_by {|r| LEVELS.index(r.capitalize) }

If there are a lot of levels, it might be more efficient to avoid the
linear search and use a hash. It's not necesarily faster in this case
with only 6 levels, but anyway...


LEVELS = %w{ High Medium Low Info Safe }
LEVEL_HASH = LEVELS.inject({}) {|h, lev| h[lev] = LEVELS.index(lev); h}

risks = LEVELS + LEVELS

sorted = risks.sort_by {|r| LEVEL_HASH[r.capitalize] }
p sorted


--
       vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

 « Return to Thread: Help required on sorting