2012-01-21 15 views
15

He leído que el uso de ipairs es lento en comparación con un ciclo for, ¿debo cambiar mi hábito de programación? Utilizaré lua 5.2 un día, actualmente 5.1.Debo usar ipairs o un ciclo para

Mis arrays tienen aproximadamente 1000 elementos como máximo.

local mytbl = { 'a','b','c','e'} 
for i,v in ipairs(mytbl) do 
    print(i,v) 
end 

for i=1,#mytbl do 
    print(i,mytbl[i]) 
end 

Respuesta

26

http://springrts.com/wiki/Lua_Performance#TEST_9:_for-loops

pairs: 3.078 (217%) 
ipairs: 3.344 (236%) 
for i=1,x do: 1.422 (100%) 
for i=1,#atable do 1.422 (100%) 
for i=1,atable_length do: 1.562 (110%) 

Nótese, sin embargo, que el uso de un bucle numérica for sólo funciona si está interactuando sobre tablas con índices numéricos secuenciales - si está utilizando claves hash para las tablas, o tablas dispersas, entonces necesitarás usar alguna forma de pairs().

+0

Gracias por la tabla de rendimiento. Una vez doble no es mucho cuando se trata de unos pocos bucles, por lo que no tengo una gran necesidad de cambiar mi código actual. Pero para los bucles futuros, ahora sé lo que tengo que hacer. ¡Gracias! – topskip

+6

Como con todas las consideraciones de rendimiento, todo depende del contexto. La optimización prematura es la raíz de todo mal y todo eso. – Amber

+0

Tu comentario debería decir: ** "entonces necesitarás usar' pairs() '" ** Solo hay dos "formas de pares": 'pairs' y' ipairs'. Este último es exactamente equivalente a un bucle for: se itera al incrementar un índice numérico de '1' a' # t'. No funcionará en sus casos de ejemplo por el mismo motivo por el que el bucle 'for' no lo hará. – Mud