lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi,

PA wrote:
> In Lua 5.1, is there any advantages/differences in using table.insert() 
> vs using the new length operator directly?

Why don't you try? I never cease to be amazed why questions
get asked that can be resolved with one-liners:

First a test for a single huge table: [lower numbers are better]

$ TIMEFORMAT="%U"
$ time lua -e 'local t={}; for i=1,1e6 do table.insert(t, 1) end'
0.901
$ time lua -e 'local t,f={},table.insert; for i=1,1e6 do f(t, 1) end'
0.709
$ time lua -e 'local t={}; for i=1,1e6 do t[#t+1] = 1 end'
0.579

Then a somewhat more realistic test with many smaller tables:

$ time lua -e 'for k=1,1e4 do local t={}; for i=1,100 do table.insert(t, 1) \
end end'
0.719
$ time lua -e 'local f=table.insert; for k=1,1e4 do local t={}; \
for i=1,100 do f(t, 1) end end'
0.551
$ time lua -e 'for k=1,1e4 do local t={}; for i=1,100 do t[#t+1] = 1 end end'
0.427

And for comparison the same tests when you know you can use
a local (!) counter (or resolve #t just once):

$ time lua -e 'local t={}; for i=1,1e6 do t[i] = 1 end'
0.194
$ time lua -e 'local t,x={},1; for i=1,1e6 do t[x] = 1; x=x+1 end'
0.222
$ time lua -e 'for k=1,1e4 do local t={}; for i=1,100 do t[i] = 1 end end'
0.256
$ time lua -e 'for k=1,1e4 do local t,x={},1; for i=1,100 do \
t[x] = 1; x=x+1 end end'
0.289

YMMV of course.

Bye,
     Mike