2016-08-15 7 views
8

मुझे मूल सरणी में एक सरणी टुकड़ा को इस तरह से बांधने में सक्षम होना चाहिए कि मूल सरणी (तत्वों को हटाने सहित) में किए गए कोई भी परिवर्तन सरणी टुकड़े में भी किए जाएंगे। क्या इसे करने का कोई तरीका है?मैं मूल सरणी में एक सरणी टुकड़ा कैसे बांध सकता हूं ताकि सभी में किए गए सभी बदलाव दोनों के लिए किए गए हों?


उदाहरण काम नहीं करता है मैं इसे कैसे करना चाहते हैं, लेकिन यह बस वहाँ बिंदु मैं बनाने के लिए कोशिश कर रहा हूँ प्रदर्शित करने के लिए है के बाद।

उदाहरण:

my @array = 1 .. 10; 
my @slice = @array[3 .. 8]; 

splice @array, 5, 2; 

print "ARRAY: "; 
print join ', ', @array; 
print "\n"; 

print "SLICE: "; 
print join ', ', @slice; 

आउटपुट:

ARRAY: 1, 2, 3, 4, 5, 8, 9, 10 
SLICE: 4, 5, 6, 7, 8, 9 

क्या मैं देख रहा हूँ मूल सरणी टुकड़ा टाई तो उत्पादन लगेगा एक रास्ता है इसके बजाए:

ARRAY: 1, 2, 3, 4, 5, 8, 9, 10 
SLICE: 4, 5, 8, 9 

मूल सरणी से 6 और 7 को हटाने से इसे सरणी स्लाइस से भी हटा दिया जाएगा।

मैं इस तरह कुछ कैसे प्राप्त कर सकता हूं?

+0

क्या आप समझा सकते हैं कि आप ऐसा क्यों करना चाहते हैं? – ThisSuitIsBlackNot

+0

मैं एक पटकथा पर काम कर रहा हूं जो एक पदानुक्रमित डेटाबेस संरचना को संभालने में कामयाब रहा है और मैं चाहता हूं कि प्रत्येक रिकॉर्ड अपने बच्चे के रिकॉर्ड की सरणी रखे। यदि बच्चे के रिकॉर्ड की सूची में संदर्भित रिकॉर्ड्स में से एक को पूरे डेटाबेस से हटा दिया गया है, तो मैं रिकॉर्ड को हटाने के लिए बाल रिकॉर्ड की सरणी को स्वचालित रूप से अपडेट करना चाहता हूं। – tjwrona1992

+0

असल में डेटाबेस में सभी रिकॉर्ड्स की एक बड़ी श्रृंखला है और बाल रिकॉर्ड सरणी बड़ी सरणी का एक टुकड़ा होगा। यदि बड़े सरणी से एक रिकॉर्ड हटा दिया जाता है, तो मैं इसे किसी भी स्लाइस से हटा देता हूं जिसे संदर्भित किया जाता है। – tjwrona1992

उत्तर

-3
use strict; 
use warnings; 
use Data::Dumper; 
my @array = 1..10; 
my @slice = \@array[3..8]; 

splice @array, 5, 2; 

print "ARRAY: "; 
print join ', ', @array; 
print "\n"; 

print "SLICE: "; 
print join ', ', @slice; 

आउटपुट:

ARRAY: 1, 2, 3, 4, 5, 8, 9, 10 
SLICE: SCALAR(0x29dcef0), SCALAR(0x29dcf20), SCALAR(0x29dcf08), SCALAR(0x29dcfb0), SCALAR(0x29dcfc, SCALAR(0x29dd058) 

इसके बजाय आइटम आप आइटम के लिए एक शून्य मान आवंटित कर सकते हैं दूर करने (यह @slice भी में एक शून्य मान, आवंटित करेगा क्योंकि @slice@array करने के लिए एक संदर्भ रखती है) और फिर @slice और वॉयला से 0 को हटा दें, आपके पास आपके हटाए गए तत्वों के साथ @slice अपडेट किया गया है

+0

यह काम नहीं करता है। 'Splice @array, 5, 2 जोड़ना; प्रिंट ',', @slice; 'अपेक्षित आउटपुट का उत्पादन नहीं करता है (और न तो' splice @array, 5, 2; प्रिंट जॉइन ',', मानचित्र $$ _, @slice; ') – ikegami

+0

क्या आपने मेरा उपयोग किया कोड? समझाएं "EXPECTED आउटपुट पुन: पेश नहीं करता है" –

+0

यदि आप पूरे उत्तर को पढ़ते हैं तो आप देखेंगे कि मैंने वास्तव में हटाए गए तत्वों के लिए "वर्कअराउंड" प्रदान किया है। –

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