5

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?

VLC
  • 9,818
  • 1
  • 31
  • 60
Sungjin Lee
  • 171
  • 2

2 Answers2

4

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}
Mr.Wizard
  • 271,378
  • 34
  • 587
  • 1,371
1

Since V 12.0 there is OrderingBy:

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

Ordering @ OrderingBy[Last] @ m

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

eldo
  • 67,911
  • 5
  • 60
  • 168