- 0 Talk
-
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<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>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
Edit
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!