मेरे पास रूबी में 2-आयामी सरणी है कि मैं एक काम करने वाला डुप्लिकेट बनाना चाहता हूं। जाहिर है मैं यह नहीं कर सकता;रूबी में बहु-आयामी सरणी को डुप्लिकेट करने का कोई आसान तरीका है?
array=[[3,4],[5,9],[10,2],[11,3]]
temp_array=array
किसी भी संशोधन मैं temp_array को भी, सरणी का प्रयास किया जाएगा के रूप में मैं केवल ऑब्जेक्ट पहचानकर्ता की नकल की है बनाने के रूप में
। मैंने सोचा कि मैं बस इसका उपयोग करके इसे प्राप्त करने में सक्षम होगा;
temp_array=array.dup
लेकिन जैसा कि temp_array बस वस्तु पहचानकर्ता कि दोहराया गया हो तो मैं अभी भी प्रारंभिक सरणी को संशोधित करने के अंत की एक सरणी है (अगर मैं समझता हूँ कि जब मैं इस किया था क्या गलत हुआ) यह काम नहीं करता। मैंने जो समाधान पाया वह निम्नलिखित करना था;
temp_array=[]
array.each{|sub| temp_array << sub.dup}
यह मेरी इच्छा को प्राप्त करता है लेकिन मेरी समस्या को हल करने का एक अजीब तरीका प्रतीत होता है।
मुझे चिंता है कि यह कैसे काम करेगा अगर मुझे नहीं पता कि मेरी सरणी क्या हो रही है (उदाहरण के लिए यदि यह संभव था कि सरणी के कुछ हिस्सों में 3-आयाम हों)। मुझे संभावित रूप से सरणी के प्रत्येक सदस्य की कक्षा का परीक्षण करना होगा ताकि यह देखने के लिए कि इसे डुप्लिकेट करने के लिए इसे फिर से चालू किया जाना है या नहीं। बिल्कुल असंभव कार्य नहीं है, लेकिन यह मेरे लिए गन्दा लगता है। क्या यह रूबी के परिणामस्वरूप बहुआयामी सरणी के लिए अंतर्निहित समर्थन की कमी है या क्या ऐसा करने के लिए एक सरल अंतर्निहित कार्य है जिसे मैंने याद किया है?
यही तरीका है। मुझे Object.deep_copy में उस कोड को चिपकाना पसंद है। –
ग्रेट, धन्यवाद। यह वास्तव में मुझे पूरी मार्शलिंग चीज भी बताता है (हालांकि मुझे जाने और वास्तव में इसके चारों ओर अपना सिर पाने के लिए कुछ और पढ़ने की ज़रूरत है)। – brad