> local t={123123123123123,123,1,23,12,31,23,12,31,23,1,23,123,1,23,123,12,3,123,12,31,23,12,31,23,12,31,23,12,31,23,123} local s=os.clock() for i =1, 1000000 do for i =1,#t do local v=t[i] end end print(os.clock()-s)
0.25373430000036
> local t={123123123123123,123,1,23,12,31,23,12,31,23,1,23,123,1,23,123,12,3,123,12,31,23,12,31,23,12,31,23,12,31,23,123} local s=os.clock() for i =1, 1000000 do for _, v in ipairs(t) do end end print(os.clock()-s)
0.18597190000582
> local t={123123123123123,123,1,23,12,31,23,12,31,23,1,23,123,1,23,123,12,3,123,12,31,23,12,31,23,12,31,23,12,31,23,123} local s=os.clock() for i =1, 1000000 do for _, v in next, t do end end print(os.clock()-s)
0.18401409999933
> local t={123123123123123,123,1,23,12,31,23,12,31,23,1,23,123,1,23,123,12,3,123,12,31,23,12,31,23,12,31,23,12,31,23,123} local s=os.clock() for i =1, 1000000 do for _, v in pairs(t) do end end print(os.clock()-s)
0.20235510001658
Arrays:
1.next
2.ipairs
3.pairs
4. generic for
loop
What about dictionaries??
> local t={} for i =97, 97+26 do t[string.char(i)]=true end local s=os.clock() for i =1, 1000000 do for _, v in pairs(t) do end end print(os.clock()-s)
0.19222349999472
> local t={} for i =97, 97+26 do t[string.char(i)]=true end local s=os.clock() for i =1, 1000000 do for _, v in next, t do end end print(os.clock()-s)
0.17488389997743
next
is the superior way to traverse dictionaries. For me at least.
Pick your poison.