2011-02-17 94 views
9

我想在Perl如何在Perl中創建二維數組?

我的代碼來創建一個二維數組:

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; 

返回非..因爲我想回到二維數組。

更新

我仍然感到困惑,因爲當我執行查詢,它給了我喜歡的單詞列表:

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

我通過語言,爲了利用for循環從數據庫中獲取所有單詞

問題是我想循環,並希望數組自動添加到2d數組。

回答

25

use warnings; use strict;放在您編寫的每個程序的頂部。這兩個編譯指示會爲你找出許多錯誤。

您無法訪問(...)後綴的數組。該結構用於調用功能mysub(...)$mysubref->(...)。要訪問數組元素,可以使用後綴[ index ]。而在Perl中,多維數組對於每個級別都需要一對[...]。這是因爲二維數組只是一個數組,其中每個元素也是一個數組。

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 

您可以瞭解更多有關Perl的數據結構和Perl在perldoc.perl.org休息。這裏有幾個直接的聯繫:

最後,@language.length沒有做什麼,你認爲它。它在標量上下文中取@language,這是它的長度作爲一個數字,然後連接它與length($_)。由此產生的表達式就像(scalar @language) . length($_)。由於<=運算符在其參數上施加了標量上下文,因此您可以簡單地編寫$id <= @language。然而,Perl提供你寫這種類型的循環中的一個更自然的方式:

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

 
for my $id (0 .. $#language) {...} 
如果你真的意味着 $id < @language因爲 $language[scalar @language]是過去的數組的末尾一個元素。

+1

我明白二維數組上的概念.. – JoT 2011-02-17 02:49:58