Inform 7 Home Page / Documentation


§16.11. Sorting

The three ways to sort a table correspond loosely to the three different orders in which tables can be repeated through. First:

sort (table name) in random order

This phrase rearranges the rows of the given table so that the non-blank rows occur at the top, in a uniformly random order, and any blank rows at the bottom. Example:

sort the Table of Recent Monarchs in random order;

Secondly:

sort (table name) in (table column) order

This phrase rearranges the rows of the given table so that the non-blank rows occur at the top, so that the given column has ascending order, and any blank rows at the bottom. Example:

sort the Table of Recent Monarchs in accession order;

Ascending order means 1 up to 10, say, or A up to Z, with blank values coming last.

sort (table name) in reverse (table column) order

This phrase rearranges the rows of the given table so that the non-blank rows occur at the top, so that the given column has descending order, and any blank rows at the bottom. Example:

sort the Table of Recent Monarchs in reverse name order;

Descending order means 10 down to 1, say, or Z down to A, with blank values coming last.

How sorting is done depends on the contents of the column being sorted on. If it holds numbers then numerical order is used, with 2 coming before 7, and so on. (And similarly for real numbers, though the existence of infinities makes this more interesting.) If times are sorted then they are sorted from midnight to midnight, following the "is greater than" relation, not with 4 AM as the zero point, as with "is after".

If text is sorted then alphabetical order is used, though this doesn't always come out the way you might expect, because upper case and lower case letters are treated as different: A-Z come before a-z, and accented letters such as é come after the regular alphabet. (What's happening here is that Inform is sorting on raw character values, not performing the full Unicode collation algorithm, which would be too slow at run-time.)

Note that blank values will always be placed below non-blank ones, and entirely blank rows last of all. This is true even if we use "reverse".

The method of sorting is "stable", that is, if two rows have the same value then they will stay the same way round in the sorted table, rather than being swapped over. For example, if we sort this into reverse index order:

Index

Comment

1

"Originally row 1"

2

"Originally row 2"

2

"Originally row 3"

3

"Originally row 4"

then we get

Index

Comment

3

"Originally row 4"

2

"Originally row 2"

2

"Originally row 3"

1

"Originally row 1"

As a result note that repeating through this sorted table goes through the original rows in order 4, 2, 3, 1; whereas repeating through the original table in reverse order goes through in order 4, 3, 2, 1. (This is all to explain the word "loosely" in the opening sentence of this section.)


arrow-up.png Start of Chapter 16: Tables
arrow-left.png Back to §16.10. Adding and removing rows
arrow-right.png Onward to §16.12. Listed in...

**ExampleJokers Wild
A deck of cards which can be shuffled and dealt from.