sorting an array based on two attributes of objects

senthil wrote:

Hi all,      I want to sort the objects of array based on two attributes.I want sort an employee class based on his salary and name , so that if two person has same salary it should be sorted with name.      Lets say for example the employee objects has following name and salary.

         name salary            d 100            c 200            b 50            a 100

     so in this case the result which i expect is

         name salary            c 50            a 100            d 100            b 200

  Note:In the above example for salary 100 the sorting is done alphabetically, but initially(before sorting) 'd' came first and then 'a' came.so basically i want to sort the array with more than one order.   Can any one help me to solve it ??

Use sort_by and have it return an array of the two objects you want sorted:

[26]irb irb(main):001:0> myarray = [{:name => "d", :salary => 100}, {:name => "c", :salary => 200}, {:name => "a", :salary => 100}] => [{:salary=>100, :name=>"d"}, {:salary=>200, :name=>"c"}, {:salary=>100, :name=>"a"}] irb(main):002:0> myarray.sort_by {|h| [h[:salary], h[:name]] } => [{:salary=>100, :name=>"a"}, {:salary=>100, :name=>"d"}, {:salary=>200, :name=>"c"}]