From: "Jesús Gabriel y Galán" Date: 2008-08-12T00:27:37+09:00 Subject: Re: Sort array by two attributes? (like sql "order by A, B") On Mon, Aug 11, 2008 at 5:16 PM, Max Williams wrote: > IN sql we can pass two arguments to the 'order by' component, and it > will order the results by A, and then B in the cases where A is the > same. > > Can anyone think of a way to do the same thing with a ruby array? For > example, if the array holds objects that have attributes/methods > "lastname" & "firstname", to order the objects in a similar way to the > sql query? > Here's one way: the trick is to create an array with the fields you want to order by in the sort_by block: irb(main):001:0> class A irb(main):002:1> attr_accessor :a,:b irb(main):003:1> def initialize a,b irb(main):004:2> @a = a irb(main):005:2> @b = b irb(main):006:2> end irb(main):007:1> end => nil irb(main):008:0> ary = [A.new(1,2), A.new(1,3), A.new(1,1), A.new(2,3), A.new(2,1)] => [#, #, #, #, #] irb(main):009:0> ary.sort_by {|x| [x.a,x.b]} => [#, #, #, #, #] Hope this helps, Jesus.