2011-02-17 9 views
9

मैं पर्लमैं पर्ल में 2 डी सरणी कैसे बना सकता हूं?

में

मेरे कोड एक 2d सरणी बनाने के लिए कोशिश कर रहा हूँ:

my @wordsList=(); 
my @words=(); 

for ($id=0; $id<[email protected]; $id++) 
{ 

     my $eng = $db->selectall_arrayref("select word from words 
                left outer join language 
                on words.languageId = language.languageId 
                where words.languageId = $id 
                ;"); 


     foreach $eng(@$eng) 
     { 
     my($word) = @$eng; 
     $ref_to_Array->[$id][$word] = @words($id,$word); 

      } 
       return $words($id, $word); 
} 

$wordsList= NextWords(); 
print $wordsList; 

यह गैर रिटर्न .. क्योंकि मैं 2 डी सरणी वापस जाने के लिए चाहते हैं।

अद्यतन

मैं अभी भी उलझन में हूँ क्योंकि जब मैं क्वेरी निष्पादित, यह मेरे जैसे शब्दों की एक सूची देता है:

select word from words where language_id = 1 
(1=english, 2 - chinese, 3 - french) 

मैं भाषा के माध्यम से और क्रम में पाश के लिए उपयोग कर रहा हूँ डेटाबेस से सभी शब्द प्राप्त करने के लिए

समस्या यह है कि मैं लूप करना चाहता हूं और चाहता हूं कि सरणी स्वचालित रूप से 2 डी सरणी में जोड़ दी जाए।

उत्तर

25

आपके द्वारा लिखे गए प्रत्येक कार्यक्रम के शीर्ष पर use warnings; use strict; रखें। उन दो pragmas आप के लिए कई त्रुटियों को पकड़ लेंगे।

आप (...) पोस्टफ़िक्स के साथ किसी सरणी तक नहीं पहुंच सकते हैं। उस निर्माण का उपयोग mysub(...) या $mysubref->(...) पर कॉल करने के लिए किया जाता है। सरणी तत्वों तक पहुंचने के लिए, आप एक पोस्टफिक्स [ index ] का उपयोग करते हैं। और पर्ल में, बहु-आयामी सरणी को प्रत्येक स्तर के लिए [...] की एक जोड़ी की आवश्यकता होती है। ऐसा इसलिए है क्योंकि 2 डी सरणी केवल एक सरणी है जहां प्रत्येक तत्व भी एक सरणी है।

my @array = ([1, 2, 3], [4, 5, 6], [7, 8, 9]); 

my $top_left  = $array[0][0]; # 1 
my $bottom_right = $array[2][2]; # 9 

print "@$_\n" for @array; 
 
1 2 3 
4 5 6 
7 8 9 

आप पर्ल के डाटा संरचनाओं और perldoc.perl.org पर पर्ल के बाकी के बारे में अधिक सीख सकते हैं।

अंत में, @language.length आप क्या सोचते हैं यह करता है नहीं करता है यहाँ कुछ सीधे संपर्क कर रहे हैं। यह स्केलर संदर्भ में @language ले रहा है, जो इसकी लंबाई एक संख्या के रूप में है और फिर length($_) के साथ इसे संयोजित कर रहा है। परिणामी अभिव्यक्ति (scalar @language) . length($_) जैसी कुछ है। चूंकि <= ऑपरेटर अपने तर्कों पर स्केलर संदर्भ लगाता है, तो आप बस $id <= @language लिख सकते हैं। हालांकि, पर्ल पाश के इस प्रकार के लेखन का एक और अधिक प्राकृतिक तरीका प्रदान करता है:

for my $id (0 .. @language) {...} 

या

 
for my $id (0 .. $#language) {...} 
यदि आप वास्तव में $language[scalar @language] के बाद से $id < @language मतलब सरणी के अंत पिछले एक तत्व है।

+1

मैं 2 डी सरणी पर अवधारणा को समझता हूं .. – JoT