API sort

From TableLibraryTutorial of lua-users.org.

table.sort(table [, compFunc]) sort(table[, compFunc])

Sort the elements of a table in-place (i.e. alter the table).

> t = { 3,2,5,1,4 } > table.sort(t) > = table.concat(t, ", ") -- display sorted values 1, 2, 3, 4, 5

If the table has a specified size only the range specified is sorted, e.g.,

> t = { 3,2,5,1,4; n=3 }  -- construct a table with user size of 3 > table.sort(t)           -- sort will be limited by user size > = table.concat(t, ", ") -- only specified size is concatenated as well 2, 3, 5


 * Warning: Setting the range of the sort is no longer possible since table.setn is no longer supported (setting n=3 will not set the size of the table to 3) Yssaril 05:31, 23 March 2008 (UTC)

A comparison function can be provided to customise the element sorting. The comparison function must return a boolean value specifying whether the first argument should be before the second argument in the sequence. The default behaviour is for the < comparison to be made. For example, the following behaves the same as no function being supplied:

> t = { 3,2,5,1,4 } > table.sort(t, function(a,b) return a&lt;b end) > = table.concat(t, ", ") 1, 2, 3, 4, 5

We can see if we reverse the comparison the sequence order is reversed.

> table.sort(t, function(a,b) return a&gt;b end) > = table.concat(t, ", ") 5, 4, 3, 2, 1


 * Notes:
 * Sorting tables containing non-numeric keys using a custom comparison function does not work. The function will not get called, and the table will be sorted according to some kind of internal function.

Sorting by Name
There is a user-function you can write that will sort a table by name during a for function.

function pairsByKeys (t, f) 	local a = {} for n in pairs(t) do table.insert(a, n) end table.sort(a, f) 		local i = 0     -- iterator variable local iter = function   -- iterator function i = i + 1 if a[i] == nil then return nil else return a[i], t[a[i]] end end return iter end

This function will replace the pairs function in a for statement. Example:

for title,value in pairsByKeys(randomtable) do 	DEFAULT_CHAT_FRAME:AddMessage(title..", "..value); end

This will print all the variables in randomtable alphabetically!