WoW:API getn

Revision as of 00:18, 31 July 2008 by WoWWiki>Casull

Lua/Libshortcut From TableLibraryTutorial of lua-users.org.

table.getn(table)


This is used to determine the size of a table. The size of a table is discussed at the top of this page.

> = table.getn({1,2,3})         -- Lua will count the elements if no size is specified
3
> = table.getn({1,2,3; n=10})   -- note, n overrides counting the elements
10
> t = {1,2,3}
> table.setn(t, 10)              -- set our own size with setn()
> = table.getn(t)
10
> = table.getn({1,2,3,nil,5,6}) -- sequence ends at element 3 due to nil value at 4
3

Note that Lua 5.1 has switched to the # operator. #t is the replacement for table.getn(t)

 > print( #{1,2,3} )
 3

However, it does not always behave as one might expect. Consider the following sequence:

> t = { 1, 2, 3 }
> dump (#t)
3
> t[1] = nil
> dump (#t)
3
> dump (t)
{
 [2] = 2
 [3] = 3
} -- table: 0x807ff70
> dump (#{ [2] = 2, [3] = 3 })
0

As you can see, the # operator is unpredictable in that it can return different values for tables with identical contents. The Lua 5.1 reference manual has this to say about it [1]:

The length of a table t is defined to be any integer index such that t[n] is not nil and t[n+1] is nil.

In other words, be careful with this operator if you are using tables with holes in them. If your table has all its values between [1] and [n] for some n, with no nils in that range, the # operator will return n. Otherwise its result may be unclear.

See Also

Template:LUA