2012-01-21 18 views
15

İmlelerin kullanımının bir for döngüsüyle karşılaştırıldığında yavaş olduğunu okudum, programlama alışkanlığımı değiştirmeliyim? Şu anda 5,1 lua, bir gün kullanacağım 5.1.Ipairs veya for döngüsü kullanmalıyım

Dizlerim en fazla 1000 öğedir. Eğer tablolar için karma tuşlarını kullanarak eğer, - Eğer sıralı sayısal endeksleri ile tablolar üzerinden yineleme eğer

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 

cevap

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

Ancak, sayısal for döngü kullanan tek çalıştığını veya seyrek tabloları, daha sonra pairs()'un bir türünü kullanmanız gerekir.

+0

Performans tablosu için teşekkürler. Sadece birkaç döngü söz konusu olduğunda, çifte zaman aslında çok fazla değil, bu yüzden mevcut kodumu değiştirmek için büyük bir ihtiyacım yok. Ama gelecekteki döngüler için, şimdi ne yapmam gerektiğini biliyorum. Teşekkürler! – topskip

+6

Tüm performans değerlendirmelerinde olduğu gibi, her şey içeriğe bağlıdır. Prematüre optimizasyon tüm kötülüklerin köküdür ve neyin değil. – Amber

+0

Yorumunuz şöyle olmalıdır: ** "o zaman çiftleri kullanmalısınız"() '' ** Çiftlerin yalnızca iki türü vardır: "çiftler" ve "çiftler". İkincisi tam olarak bir for döngüsüne eşdeğerdir: '1' den # t '' ye kadar sayısal bir indeks artırarak yineleme yapar. Örnek durumlarınızda, "for" döngüsünün aynı nedenden dolayı çalışmaz. – Mud

İlgili konular