2009-11-24 15 views
5
# I have a hash 
    my %my_hash; 

# I have an array 
    @my_array = ["aa" , "bbb"]; 

# I store the array in my hash 
    $my_hash{"Kunjan"} = @my_array; 

# But I can't print my array's element 
    print $my_hash{"Kunjan"}[0]; 

मैं पर्ल के लिए नया हूं। क्रिप्या मेरि सहायता करे।पर्ल में मेरे हैश में संग्रहीत सरणी के तत्व को मैं कैसे एक्सेस करूं?

+5

किसी ने अभी तक इसका उल्लेख नहीं किया है, लेकिन डेटा संरचना कुकबुक देखें। विभिन्न नेस्टेड संरचनाओं में डेटा बनाने और एक्सेस करने के लिए इसमें कई उदाहरण हैं। आप इसे 'perldoc perldsc' कमांड का उपयोग करके अपनी मशीन पर पढ़ सकते हैं और आप इसे http://perldoc.perl.org/perldsc.html – daotoad

+1

पर भी ढूंढ सकते हैं, http://perlmonks.org/?node= देखें संदर्भ + त्वरित + संदर्भ – ysth

उत्तर

3

आप अपने कार्यक्रम में कुछ त्रुटियाँ हैं: पहली पंक्ति पर @my_array के सामने

  1. जोड़ा गया my
  2. बदलें (...) को [...] पर:

    my @my_array = ("aa" , "bbb"); 
    $my_hash{"Kunjan"} = \@my_array; 
    print $my_hash{"Kunjan"}[0]; 
    

    मैं तीन परिवर्तन किए पहली पंक्ति

  3. @my_array o के सामने \ जोड़ें n दूसरी पंक्ति
+0

साथ ही साथ जोड़ सकता है कि बैकस्लैश सरणी को संदर्भ में परिवर्तित करता है। यहां संदर्भों के बारे में पढ़ें: http://perldoc.perl.org/perlref.html –

14

आपका सरणी वाक्यविन्यास गलत है। आप एक अनाम सूची संदर्भ बना रहे हैं, और @my_array उस संदर्भ वाली एक एकल-तत्व सूची है।

आप संदर्भ के साथ काम कर सकते हैं या तो ठीक से, एक अदिश के रूप में:

$my_array = ["aa" , "bbb"]; 
$my_hash{"Kunjan"} = $my_array; 

या जब यह हैश में डाल आप एक सूची के रूप में सूची के साथ काम कर सकते हैं, केवल संदर्भ बनाने:

@my_array = ("aa" , "bbb"); 
$my_hash{"Kunjan"} = \@my_array; 
0

इन संशोधनों का प्रयास करें:

my %my_hash; 

# ["aa" , "bbb"] produces an array reference. Use() instead 
my @my_array = ("aa" , "bbb"); 

# 'Kunjan' hash is given reference to @my_array 
$my_hash{ Kunjan } = \@my_array; 

# bareword for hash key is nicer on the eye IMHO 
print $my_hash{ Kunjan }[0]; 


लेकिन वहाँ अभी भी एक बात आप यदि आप इस विधि का उपयोग करने पर विचार करने की आवश्यकता है:

unshift @my_array, 'AA'; 
print $my_hash{ Kunjan }[0]; # => AA - probably not what u wanted! 


तो क्या आप शायद करने के बाद कर रहे हैं:

$my_hash{ Kunjan } = ["aa" , "bbb"]; 

फिर हैश नहीं रह गया है संदर्भित कर रहा है @my_array ।

/I3az/

10

आप केवल अपनी स्क्रिप्ट के शीर्ष पर इस रखा था, तो:

use strict; 
use warnings; 

... आप यह दर्शाता है कि क्या गलत था कुछ त्रुटि संदेश प्राप्त होंगे:

Global symbol "@my_array" requires explicit package name at kunjan-array.pl line 8. 
Global symbol "@my_array" requires explicit package name at kunjan-array.pl line 11. 

तो, पहले my @my_array; के साथ सरणी घोषित करें और फिर आप पाएंगे:

Can't use string ("1") as an ARRAY ref while "strict refs" in use at kunjan-array.pl line 14. 
  • आप एक arrayref बनाया है और एक सरणी के लिए असाइन करें करने का प्रयास किया - कैसे एक सरणी की घोषणा करने के लिए perldoc perldata देख
  • आप (आप केवल इस तरह के एक arrayref रूप scalars, प्रदान कर सकते हैं एक हैश को एक सरणी असाइन करने का प्रयास - संदर्भों के बारे में अधिक जानकारी के लिए perldoc perlref देखें)
  • आपको सरणी तत्व पर प्राप्त करने के लिए हैश तत्व को अव्यवस्थित करने की आवश्यकता है, उदाहरण के लिए$my_hash{"Kunjan"}->[0] - फिर कैसे एक hashref भिन्नता
+0

तीर की कोई आवश्यकता नहीं: '$ my_hash {Kunjan} [0] 'काम करेगा। – friedo

+0

@friedo: हुह, मुझे नहीं लगता था कि '->' चीनी पहले '->' से पहले काम करती है। साफ। – Ether

0

दूसरों पहले से ही समझाया करने के लिए अच्छी तरह से क्या क्या के लिए perldoc perlref देखते हैं, लेकिन मैं जोड़ने के लिए, कि (खासकर यदि आप पर्ल के लिए नए हैं), यह अगर आप खर्च बहुत अच्छा होगा चाहते हैं कुछ समय और perldsc और perllol दस्तावेज़ पढ़ें।

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

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