# Sorting an array based on two attributes of objects

**URL:** <https://www.ruby-forum.com/t/sorting-an-array-based-on-two-attributes-of-objects/90166>\
**Category:** Rails\
**Created:** [March 26, 2007, 3:57pm UTC](https://www.ruby-forum.com/t/sorting-an-array-based-on-two-attributes-of-objects/90166 "2007-03-26T15:57:18Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![senthil](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/c89c15/32.png) [@senthil](https://www.ruby-forum.com/u/senthil)\
**Post date:** [March 26, 2007, 3:57pm UTC](https://www.ruby-forum.com/t/sorting-an-array-based-on-two-attributes-of-objects/90166/1 "2007-03-26T15:57:18Z")

</div>

Thanks for some of your replies for the lst post i need small  
modification in that post … i want to sort the salary in descending  
order. i have explained the same quesion again…

Hi all,  
I want to sort the objects of array based on two attributes.I want  
sort an employee class based on his salary in descecding order 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
       b 200
       a 100
       d 100
       c 50

```

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 ??

---

<div class="post-metadata">

**Author:** ![senthil](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/c89c15/32.png) [@senthil](https://www.ruby-forum.com/u/senthil)\
**Post date:** [March 26, 2007, 5:01pm UTC](https://www.ruby-forum.com/t/sorting-an-array-based-on-two-attributes-of-objects/90166/2 "2007-03-26T17:01:22Z")

</div>

On Mar 26, 2007, at 9:57 AM, senthil wrote:

> person has same salary it should be sorted with name.  
> so in this case the result which i expect is  
> order.  
> Can any one help me to solve it ??

[[‘d’,100], [‘c’,200], [‘b’,50], [‘a’,100] ].sort\_by {|ns|  
[- ns.last, ns.first]}  
=\> [[“b”, 50], [“a”, 100], [“d”, 100], [“c”, 200]]

An array compares on its elements. (The only change from my earlier  
response is to negate the salary for sorting purposes.)

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid
