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