2012-01-21 3 views
15

Ho letto che l'uso di ipairs è lento rispetto a un ciclo for, dovrei cambiare abitudine di programmazione? Userò lua 5.2 un giorno, attualmente 5.1.Devo usare ipairs o un ciclo for

I miei array sono al massimo di 1000 articoli.

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 

risposta

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%) 

Si noti, tuttavia, che l'utilizzo di un numerica for ciclo funziona solo se si sta iterazione di tabelle con indici numerici sequenziali - se si sta utilizzando le chiavi di hash per le tabelle, o tabelle sparse, quindi è necessario utilizzare qualche forma di pairs().

+0

Grazie per la tabella delle prestazioni. Un doppio tempo in realtà non è molto quando si tratta di pochi cicli, quindi non ho un grande bisogno di cambiare il mio codice attuale. Ma per i circuiti futuri, ora so cosa devo fare. Grazie! – topskip

+6

Come tutte le considerazioni sulle prestazioni, tutto dipende dal contesto. L'ottimizzazione prematura è la radice di tutto il male e quant'altro. – Amber

+0

Il tuo commento dovrebbe essere: ** "allora dovrai usare' pairs() '" ** Ci sono solo due "forme di coppie": 'pair' e' ipairs'. Quest'ultimo è esattamente equivalente a un ciclo for: itera incrementando un indice numerico da '1' a' # t'. Non funzionerà nei tuoi casi di esempio per lo stesso motivo per cui il ciclo 'for' non lo farà. – Mud