2013-03-19 4 views
5

मेरे पास हैश की एक बड़ी श्रृंखला है, मैं सरणी से कुछ हैश पकड़ना चाहता हूं और पहली सरणी को बदले बिना नए सरणी में डालना चाहता हूं। मुझे हैश को सरणी में धक्का देने में समस्या आ रही है, मैं ith तत्व को कैसे एक्सेस करूं जो हैश है।मैं पर्ल में हैश की सरणी कैसे प्राप्त करूं?

my @myarray; 
$my_hash->{firstname} = "firstname"; 
$my_hash->{lastname} = "lastname"; 
$my_hash->{age} = "25"; 
$my_hash->{location} = "WI"; 
push @myarray,$my_hash; 

$my_hash->{firstname} = "Lily"; 
$my_hash->{lastname} = "Bily"; 
$my_hash->{age} = "22"; 
$my_hash->{location} = "CA"; 
push @myarray,$my_hash; 

$my_hash->{firstname} = "something"; 
$my_hash->{lastname} = "otherthing"; 
$my_hash->{age} = "22"; 
$my_hash->{location} = "NY"; 
push @myarray,$my_hash; 

my @modifymyhash; 
for (my $i=0;$i<2; $i++) { 
     print "No ".$i."\n"; 
     push (@modifymyhash, $myarray[$i]); 
     print "".$myarray[$i]."\n"; #How do I print first ith element of array which is hash. 
} 

उत्तर

12

सबसे पहले आप

use strict; 
use warnings; 

तो, परिभाषित करना चाहिए

my $my_hash; 

प्रारंभ $my_hash इससे पहले कि आप मान निर्दिष्ट क्योंकि अन्यथा आप इसे अधिलेखित और सभी तीन तत्वों एक ही हैश को इंगित

$my_hash = {}; 

और अंत में, उपयोग करने के लिए हैश के सदस्यों

$myarray[$i]->{firstname} 

या पूरे हैश मुद्रित करने के लिए, आप उदाहरण के लिए उपयोग कर सकते हैं Data::Dumper

print Dumper($myarray[$i])."\n"; 

या किसी अन्य विधि, How can I print the contents of a hash in Perl? या How do I print a hash structure in Perl?

अपनी टिप्पणी में अपडेट करें:

आप नई सरणी, जो पूरी तरह से काम करता है में

push (@modifymyhash, $myarray[$i]); 

साथ हैश कॉपी। आप

foreach my $h (@myarray) { 
    print Dumper($h), "\n"; 
} 

foreach my $h (@modifymyhash) { 
    print Dumper($h), "\n"; 
} 

के साथ सत्यापित कर सकते हैं कि दोनों सरणी में एक ही हैश है।

यदि आप केवल संदर्भों की बजाय गहरी प्रतिलिपि बनाना चाहते हैं, तो आप एक नया हैश आवंटित कर सकते हैं और प्रतिलिपि में ith तत्व कॉपी कर सकते हैं। फिर एक हैश भिन्नता के लिए @modifymyhash

my $copy = {}; 
%{$copy} = %{$myarray[$i]}; 
push (@modifymyhash, $copy); 
+0

मैं दोनों स्ट्रिंग और चेतावनियों का इस्तेमाल किया है: अच्छी तरह से एक हैश को मुद्रित करने के आप इसे ऊपर पुनरावृति करने के लिए है, वहाँ कोई "अच्छा" stringification है। और मैंने my_hash को भी आरंभ और परिभाषित किया है। मैं पूरे हैश को नई सरणी में धक्का देना चाहता हूं। फिर भी धन्यवाद। – mysteriousboy

+1

@mysteriousboy आप पहले ही हैश को '@ संशोधितशैश' में धक्का दे चुके हैं। इसमें गलत क्या है? –

2

में प्रतिलिपि संग्रहीत, %{ ... } का उपयोग करें:

print %{ $myarray[$i] }, "\n"; 

यह शायद अभी भी आप क्या चाहते हैं नहीं करता है।

print $_, ':', $myarray[$i]{$_}, "\n" for keys %{ $myarray[$i] }; 
संबंधित मुद्दे