2009-03-06 13 views
13

मैं एएस 3 में ऐरे, डिक्शनरी और ऑब्जेक्ट प्रकारों के लिए पुनरावृत्ति आदेश जानना चाहता हूं, प्रत्येक के लिए और प्रत्येक के लिए लूप के लिए। इन लूप प्रकार संयोजनों के पुनरावृत्ति क्रम में कौन से कारक बदल सकते हैं?फॉर-प्रत्येक लूप AS3: क्या दिशा की गारंटी है?

उदाहरण के लिए मुझे लगता है कि एक ऐरे प्रकार के लिए प्रत्येक का उपयोग हमेशा पहले तत्व से अंतिम तक चलता है। प्रत्येक के लिए एक शब्दकोश पर उपयोग नहीं किया जा सकता है तो ऑर्डर को फॉर-इन लूप का उपयोग करके कैसे निर्धारित किया जाता है?

+0

+1। बहुत अच्छा सवाल, आपके अवलोकन क्या हैं? मैं उत्सुक हूँ! – dirkgently

+1

यह एक अच्छा मौलिक है आह :) मेरे पास थोड़ी देर पहले प्रोजेक्ट में एक बग था, जिसे मैंने एक सरणी के रूप में देखा था या तो इसके पीछे से आगे बढ़ रहा था। मैंने फॉर-प्रत्येक को फॉर-इंडेक्स ++ लॉप के साथ बदल दिया और बग गायब हो गया। मैंने वास्तव में 100% सुनिश्चित नहीं किया कि कारण क्या था। –

उत्तर

5

क्या आपका मतलब है for (x in y) प्रत्येक लूप के लिए प्रकार? एएस 3 विनिर्देश कहता है कि लूप के लिए "ईसीएमए -262 संस्करण 3 और ई 4 एक्स में परिभाषित एक ही वाक्यविन्यास और अर्थशास्त्र है"।

ईसीएमए -262, खंड 12.6.4 बताता है कि "गणना का क्रम वस्तु द्वारा परिभाषित किया गया है" - दूसरे शब्दों में, यह इस बात पर निर्भर करेगा कि आप एक सूची, एक शब्दकोश, एक सरणी आदि के माध्यम से पुनरावृत्त कर रहे हैं या नहीं।

मैं करूंगा आशा है कि सबसे अधिक संग्रह स्पष्ट रूप से गणन आदेश की जानकारी मौजूद होगी (या इसी क्रम में परिभाषित नहीं है), लेकिन मैं जाँच नहीं की है प्रलेखन ...

संपादित करें: दुर्भाग्य से चश्मा राज्य कि "गुणों की गणना करने के यांत्रिकी [...] कार्यान्वयन निर्भर है।" ऑर्डर निर्दिष्ट करने के लिए मैं ऐरे दस्तावेज़ों में कुछ भी नहीं देख सकता। ईमानदार होने के लिए यह थोड़ा असंतोषजनक है :(

+0

धन्यवाद जॉन, मैंने अभी आपके प्रश्न –

+1

के आधार पर प्रश्न अधिक विशिष्ट बना दिया है, मैंने पूरी तरह से सवाल को दोहराया है, मुझे लगता है कि यह अब स्पष्ट है :) –

+1

जॉन संपादित करने के लिए धन्यवाद, यह निश्चित रूप से असंतोषजनक है कि यह दस्तावेज़ीकरण में निर्दिष्ट नहीं है। मैं इस –

2

मूल्यांकन के क्रम AS3.0 में बदल गए, इससे पहले, एएस 1.0 और 2.0 में, मूल्यांकन का क्रम उस क्रम पर आधारित था जिसमें वस्तुओं को जोड़ा गया था। अब, में 3.0, सभी पाशन सरणी व्यवस्था को बनाए रखता टुकड़ा का प्रयास करें:।

var a:Array = new Array(); 
a[ 1 ] = 'first'; 
a[ 0 ] = 'second'; 

for (var key:String in a) 
    trace(key + ': ' + a[ key ]); 

AS3.0 और AS1.0 के साथ ऊपर की कोशिश करो/2.0

+0

पर एएस 3 विशिष्ट दस्तावेज की एक नज़र डालेगा सवाल यह है कि क्या यह कोड विभिन्न फ़्लैश रनटाइम के लिए एक ही आउटपुट उत्पन्न करता है। – Pup

8

के रूप में कॉलिन मूक, एक के आदेश से आवश्यक ActionScript 3.0 में कहा गया है प्रत्येक लूप के लिए गारंटी नहीं दी जाती है जब तक कि एक एक्सएमएल या एक्सएमएललिस्ट ऑब्जेक्ट की गणना न हो;

Click here for Colin Moock's words from his book.

चर्चा की here के रूप में समाधान कर रहे हैं, लेकिन ईमानदारी से आप तो आदेश की गारंटी करने की जरूरत है तो बस पाश के लिए एक नियमित रूप से पुराने उपयोग करें और यह पुनरावृति (लंबाई, numChildren, आदि) समय की संख्या है।

+0

क्या कोई विशेष कारण है जिसे आप गारंटी के लिए नहीं जानते हैं? मैं समझ सकता हूं क्योंकि एक ऐरे में गैर-संख्यात्मक अनुक्रमण हो सकता है। जो मुझे आश्चर्यचकित करता है .. निश्चित रूप से एक वेक्टर। <> एक गारंटीकृत आदेश है क्योंकि यह अनुक्रमिक रूप से स्मृति में संग्रहीत है? –

+0

जैसा कि मैंने ऊपर बताया है, कॉलिन मॉक ने इसे विस्तार से कवर किया है, ऊपर दिए गए लिंक का पालन करने के लिए स्वतंत्र महसूस करें जो सीधे उसकी पुस्तक से लिया जाता है। -चेयर –

+2

ईमानदार होने के लिए यदि कोई कारण नहीं दिया गया है तो मैं उस कथन के साथ काफी असहज हूं। ऐसा नहीं है कि मुझे विश्वास है कि यह झूठा है, लेकिन इसके पीछे कोई तर्क या तर्क नहीं है (संपादन के कारण सबसे अधिक संभावना है)।मुझे आंतरिक मैकेनिक्स में दिलचस्पी है कि क्यों प्रत्येक लूप एक ऐरे –

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