# Numbering element in descending order

How can I numbering the elements in descending order of second elements of sublists? For example, if I have the list which is

m={{1, 5}, {2, 8}, {3, 9}, {4, 2}, {5, 9}, {6, 7}, {7, 9}, {8, 10}, {9, 5}, {10, 2}};


The smallest second element is 2 of {10,2} so its number is 1.
Second smallest second element is also 2 of {4,2} so its number will be 2.
The output that I want is then: {4, 6, 9, 2, 8, 5, 7, 10, 3, 1}.
How can I do this?

• Please have a look at SortBy. – b.gates.you.know.what Oct 30 '12 at 10:36

Why you rank {10, 2} before {4, 2} escapes me. Ignoring that:

m = {{1, 5}, {2, 8}, {3, 9}, {4, 2}, {5, 9}, {6, 7},
{7, 9}, {8, 10}, {9, 5}, {10, 2}};

m[[All, 2]] // Ordering // Ordering

{3, 6, 7, 1, 8, 5, 9, 10, 4, 2}


Equivalent: Nest[Ordering, m[[All, 2]], 2]

See Ordering.

If we reverse m before and after we get:

Nest[Ordering, Reverse[m][[All, 2]], 2] // Reverse

 {4, 6, 9, 2, 8, 5, 7, 10, 3, 1}

• oh, I miss that part. If second element is same, I want to rank the sublists in ascending order of first element. Can you help me one more time please? – Sungjin Lee Oct 30 '12 at 11:02
• Sometimes, I wish they'd added an OrderingBy[] in complete analogy to SortBy[]... – J. M.'s ennui Oct 30 '12 at 11:07
• @Sungjin, Ordering[{{1, 5}, {2, 8}, {3, 9}, {4, 2}, {5, 9}, {6, 7}, {7, 9}, {8, 10}, {9, 5}, {10, 2}}, All, If[Last[#1] != Last[#2], Last[#1] > Last[#2], First[#1] <= First[#2]] &] – J. M.'s ennui Oct 30 '12 at 11:14
• @J.M. orderingBy[list_, f_] := Ordering[{f@#, #} & /@ list] – Dr. belisarius Oct 30 '12 at 12:37
• Two or more, use a... Nest? Dijkstra would be proud! :) – Oleksandr R. Oct 30 '12 at 14:02