On Oct 30, 10:00 ¨Âí¬ ÂòéáÃáîäìå¼â®ãáîä®®®Àðïâïø®ãïí÷òïôåº
> Josef 'Jupp' Schugt wrote:
> > def datecmp(a, b, reasonable = true)
> >  ¨Âòòᬠáòòâ á®óðìéô¨§¯§©â®óðìéô¨§¯§©
> >  ¨Âíð ¨áòòáÛ²Ý ¼½áòòâ۲ݩ
> >  ¨Âåôõòãíéæ ¨ãíð ¨áòòáÛ²Ý ¼½áòòâ۲ݩ¡½ > >  ¨Âòåáóïîáâìå
> > cmp = (arra[0] <=> arrb[0])) != 0 ? cmp : (arra[1] <=> arrb[1])
> >  ¨Âìó> > cmp = (arra[1] <=> arrb[1])) != 0 ? cmp : (arra[0] <=> arrb[0])
> >  ¨Âîä
> > end
>
> > date = ['12/01/2007', '11/02/2007', '11/11/2005']
> > puts "reasonable date format"
> > puts date.sort { |a, b| datecmp(a, b) }
> > puts "\nno reasonable date format"
> > puts date.sort { |a, b| datecmp(a, b, false) }
>
> I think you got "reasonable" and "unreasonable" reversed (unless you are
> American :-)
>
> Here is a shorter solution:
>
> MapR = lambda { |x| x.split('/').values_at(2,1,0) }
> MapU = lambda { |x| x.split('/').values_at(2,0,1) }
>
> date = ['12/01/2007', '11/02/2007', '11/11/2005']
> puts "reasonable date format"
> puts date.sort_by(&MapR)
> puts "\nno reasonable date format"
> puts date.sort_by(&MapU)


MAP_R = proc{|x| x.split('/').reverse }
MAP_U = proc{|x| y=x.split('/'); [y.pop,y] }

dates = %w(12/01/2007 11/02/2007 11/11/2005)
puts "reasonable date format"
puts dates.sort_by(&MAP_R)
puts "unreasonable date format"
puts dates.sort_by(&MAP_U)