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"}]