2012-01-21 13 views
15

मैंने पढ़ा है कि लूप के मुकाबले आईपैयर का उपयोग धीमा है, क्या मुझे अपनी प्रोग्रामिंग आदत बदलनी चाहिए? मैं लू 5.2 एक दिन का उपयोग करूँगा, वर्तमान में 5.1।क्या मुझे आईपैयर या लूप के लिए उपयोग करना चाहिए

मेरे सरणी लगभग 1000 आइटम हैं।

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 

उत्तर

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

हालांकि, ध्यान दें एक संख्यात्मक for पाश का उपयोग कर ही काम करता है कि आप अनुक्रमिक सांख्यिक सूचकांक के साथ टेबल के ऊपर पुनरावृत्ति कर रहे हैं - आप अपनी टेबल के लिए हैश कुंजी का उपयोग कर रहे हैं, या स्पैस टेबल, तो आपको pairs() के कुछ रूपों का उपयोग करने की आवश्यकता होगी।

+0

प्रदर्शन तालिका के लिए धन्यवाद। जब कुछ लूप की बात आती है तो एक डबल टाइम वास्तव में ज्यादा नहीं होता है, इसलिए मुझे अपना वर्तमान कोड बदलने की बड़ी आवश्यकता नहीं है। लेकिन भविष्य के लूप के लिए, अब मुझे पता है कि मुझे क्या करना है। धन्यवाद! – topskip

+6

सभी प्रदर्शन विचारों के साथ, यह सब संदर्भ पर निर्भर करता है। समयपूर्व अनुकूलन सभी बुराई और क्या नहीं है। – Amber

+0

आपकी टिप्पणी को पढ़ना चाहिए: ** "तो आपको 'जोड़े()' "** केवल दो" जोड़े के रूपों का उपयोग करना होगा ":' जोड़े 'और' ipairs'। उत्तरार्द्ध बिल्कुल लूप के बराबर है: यह संख्यात्मक सूचकांक को '1' से' # t' तक बढ़ाकर पुनरावृत्त करता है। यह आपके उदाहरण मामलों में काम नहीं करेगा क्योंकि उसी कारण से 'लूप' नहीं होगा। – Mud

संबंधित मुद्दे