From: Anurag Priyam Date: 2011-07-01T20:15:29+09:00 Subject: Re: How to order Structs based on two fields On Fri, Jul 1, 2011 at 4:22 PM, Ińaki Baz Castillo wrote: > Hi, I've a struct like this: > >  KK = Struct.new(:a,:b) > > and some entries in an array: > >  kk1=KK.new(0,10) >  # > >  kk2=KK.new(0,5) >   > >  kk3=KK.new(2,0) >  # > >  kk4 = KK.new(2,5) >  # > >  array = [kk3, kk2, kk1, kk4] > > > I need to order the array based: > - Elements with minor :a must be first. > - If two elements have same :a, then order based on higher :b. > > The result should be: > >  [kk1, kk2, kk4, kk3] > > > I expected that the following could work: > >  array.sort_by{|entry| entry.a or entry.b} How about: array.sort do |i, j| r = i.a <=> j.a case r when 0 r else -1 * (i.b <=> j.b) end end -- Anurag Priyam http://about.me/yeban/