A column sort routine
Anonym
In spreadsheet programs like Excel or LibreOffice, you can apply a sort on a column to every other column in the spreadsheet. IDL's SORT function doesn't provide this functionality, but with a little code, we can make it so. The function COLSORT (get the source code here) accepts a 2D array and the zero-based index of the column to sort on. By default, values are sorted in ascending order; a keyword can be set to sort in descending order. Here's an example of how the routine works. Start with a 4 x 5 array of numbers:
IDL> a = round(randomu(seed, 4, 5) * 20.0)
IDL> print, 'Original array:', a, format='(a,/,4(i))'
Original array:
8 6 14 10
4 9 18 5
1 11 13 18
8 9 11 9
3 19 4 16
Use COLSORT to perform a reverse sort on column index 1 (the second column) and extend the sort to the other columns in the array:
IDL> sort_index = 1
IDL> b = colsort(a, sort_index, /reverse_sort)
Check the result:
IDL> print, 'Sorted (descending) array:', b, format='(a,/,4(i))'
Sorted (descending) array:
3 19 4 16
1 11 13 18
8 9 11 9
4 9 18 5
8 6 14 10
This program could be extended to apply to rows and to arrays of higher dimensionality.