Quantcast API sort - WoWWiki - Your guide to the World of Warcraft
Recent changes Random page
GAMING
Gaming
 
StarCraft Wiki
Super Smash Wiki
Halopedia
Diablo Wiki
FFXIclopedia
Grand Theft Wiki
See more...

API sort

From WoWWiki

Jump to: navigation, search

"sort" is a shortcut for the standard Lua library function "table.sort". They can both be used interchangeably.

From TableLibraryTutorial of lua-users.org.

table.sort(table [, comp])

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

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!


 


This is a Lua function and documented as part of the World of Warcraft API

Rate this article:
Share this article: