I have an array of objects
[<#a star=1 val=1>, <#a star=nil val=3> , <#a star=2 val=2>]
i need the array to be sorted by time, then by val
[ <#a star=2 val=2>, <#a star=1 val=1>, <#a star=nil val=3> ]
but using the sort_by throws an error because the time is nil.
I am using an ugly way to sort right now, but i am sure there is a nice way to go about it
starred=[]
@answers.each {|a| (starred << a) if a.starred }
@answers=@answers-starred
starred=starred.sort_by {|a| a.starred }.reverse
@answers=starred+@answers
When it has to compare two elements, it compares an arrays. When Ruby compares arrays (calls
===
method), it compares 1st element, and goes to the 2nd elements only if the 1st are equal.? 1 : 0
garantees, that we'll have Fixnum as 1st element, so it should be no error.If you do
? 0 : 1
,nil
will appear at the end of array instead of begining.Here is an example: