In Lua, there seem to be two ways of appending an element to an array:
table.insert(t, i)
and
t[#t+1] = i
Which should I use, and why?
lualua-table
In Lua, there seem to be two ways of appending an element to an array:
table.insert(t, i)
and
t[#t+1] = i
Which should I use, and why?
Best Solution
Which to use is a matter of preference and circumstance: as the
#
length operator was introduced in version 5.1,t[#t+1] = i
will not work in Lua 5.0, whereastable.insert
has been present since 5.0 and will work in both. On the other hand,t[#t+1] = i
uses exclusively language-level operators, wherastable.insert
involves a function (which has a slight amount of overhead to look up and call and depends on thetable
module in the environment).In the second edition of Programming in Lua (an update of the Lua 5.0-oriented first edition), Roberto Ierusalimschy (the designer of Lua) states that he prefers
t[#t+1] = i
, as it's more visible.Also, depending on your use case, the answer may be "neither". See the manual entry on the behavior of the length operator:
As such, if you're dealing with an array with holes, using either one (
table.insert
uses the length operator) may "append" your value to a lower index in the array than you want. How you define the size of your array in this scenario is up to you, and, again, depends on preference and circumstance: you can usetable.maxn
(disappearing in 5.2 but trivial to write), you can keep ann
field in the table and update it when necessary, you can wrap the table in a metatable, or you could use another solution that better fits your situation (in a loop, alocal tsize
in the scope immediately outside the loop will often suffice).