2011-11-18 7 views
7

मुझे संदर्भ पद्धति द्वारा एक्शनस्क्रिप्ट के सरणी असाइनमेंट के साथ काम करने के लिए अपरिचित लगता है। मैं समझता हूं कि यह क्या कर रहा है, लेकिन मुझे किसी भी तरह से इस पद्धति के साथ कई सरणी प्रबंधित करने में भ्रमित लगता है। क्या एक्शनस्क्रिप्ट सरणी के साथ काम करने का कोई आसान तरीका है जहां सरणी असाइनमेंट संदर्भ के बजाय VALUE द्वारा है? उदाहरण के लिए, यदि मैं oneArray से twoArray को भविष्य में हमेशा के लिए दो सरणी को जोड़ने के बिना असाइन करना चाहता हूं, तो इसे कैसे करें? क्या यह काम करेगा?एक्शनस्क्रिप्ट: संदर्भ के बजाय VALUE द्वारा सरणी कैसे असाइन करें?

var oneArray:Array = new Array("a", "b", "c"); 
var twoArray:Array(3); 
for (ii=0; ii<3; ii++) { twoArray[ii] = oneArray[ii]; } 

आशय oneArray में बदलाव देखे बिना twoArray बदलने में सक्षम होने के लिए है।

कोई सलाह कि संदर्भ के बजाय VALUE द्वारा सरणी कैसे असाइन करें?

---- संदर्भ के लिए ----

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html

सरणी काम संदर्भ के बजाय मूल्य द्वारा होता है। जब आप किसी अन्य सरणी चर करने के लिए एक सरणी चर निर्दिष्ट करते समय दोनों एक ही सरणी का संदर्भ लें:

var oneArray:Array = new Array("a", "b", "c"); 
var twoArray:Array = oneArray; // Both array variables refer to the same array. 
twoArray[0] = "z";    
trace(oneArray);    // Output: z,b,c. 

उत्तर

5

आप प्रत्येक सरणी तत्व में एक ही मूल्यों के साथ दो अलग प्रतियां गारंटी करने के लिए सरणी क्लोन कर सकते हैं यह वही है जो आप खोज रहे हैं। Cloning arrays -

+0

बस मेरी दिशा की दिशा में आपको आगे बढ़ाने के लिए टास्किनूर का जवाब देखा, हे, 'कंसट' वास्तव में एक ऐरे क्लोनिंग के मामले में 'स्लाइस' के रूप में तेज़ है। :) – xLite

+1

धन्यवाद! मैंने थोड़ा सा शोध किया और आपके दावे का समर्थन करने वाले कुछ लिंक पाए। यहां एक है: http://agit8.turbulent.ca/bwp/2008/08/flash-as3-optimization-fastest-way-to-copy-an-array/ – ggkmath

+1

यह केवल एक उथली प्रतिलिपि बना देगा। एक सरणी की गहरी प्रतिलिपि के लिए आपको AS3 में क्लोनिंग सरणी के लिए बाइटएरे का उपयोग करना होगा: http: //help.adobe।com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7ee7.html – TheDarkIn1978

10

ऐसा लगता है आप देख रहे हैं की तरह slice विधि के लिए। यह एक नई सरणी देता है जिसमें मूल सरणी से तत्वों की एक श्रृंखला होती है।

var oneArray:Array = new Array("a", "b", "c"); 
var twoArray:Array = oneArray.slice(); 
twoArray[0] = "z";    
trace(oneArray); 

संपादित करें: ध्यान दें कि टुकड़ा एक उथली प्रतिलिपि करता है, न कि एक गहरी प्रति। यदि आप एक गहरी प्रतिलिपि की तलाश में हैं तो कृपया टिप्पणी में निर्दिष्ट लिंक का पालन करें।

+5

यहाँ गहरी क्लोनिंग http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7ee7.html –

+0

@ जॉन Giotta, लिंक के लिए धन्यवाद बारे में कुछ जानकारी है। मैंने जवाब संपादित किया है। – taskinoor

+0

उत्तर के लिए धन्यवाद, और खासकर उथले बनाम गहरे क्लोनिंग के बीच अंतर (मुझे कोई जानकारी नहीं थी)। – ggkmath

0

अगर मैं सवाल सही ढंग से समझ, आप ऐसा कर सकता है:

var oneArray:Array = new Array("a", "b", "c"); 
var twoArray:Array = oneArray.concat(); 
twoArray[0] = "z"; 
trace(oneArray); // Output: a,b,c 

आशा:

var collection= new ArrayCollection(["a", "b", "c"]); 
var clonedCollection = new ArrayCollection(ObjectUtil.copy(collection.source) as Array); 

// a, b, c 
trace(collection.toString()); 
// a, b, c 
trace(clonedCollection .toString()); 

clonedCollection.removeItemAt(0); 

// a, b, c 
trace(collection.toString()); 
// b, c 
trace(clonedCollection .toString()); 
-2

आप में livedocs.adobe.com वर्णित के रूप में, ByteArray.writeObject और फिर ByteArray.readObject का उपयोग कर एक नई वस्तु के लिए बाहर का उपयोग कर वस्तु कॉपी करने के लिए एक क्लोन समारोह बना सकते हैं।

ध्यान दें कि writeObject और readObjectObject और Array से अधिक जटिल वस्तुओं को समझ नहीं पाएंगे।

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