2011-02-17 34 views
9

benim kod Perl'de bir 2D dizi nasıl oluşturabilirim?

Perl

bir 2d dizi oluşturmak çalışıyorum: olmayan döner

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; 

.. ben 2d dizi dönmek istiyorum çünkü. Ben dil yoluyla ve sırayla döngü kullanıyorum

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

: Ben sorguyu yürütmek, bunun bana gibi kelimelerin bir listesini verir çünkü

Güncelleme

Hala karıştı

Veritabanından tüm kelimeleri almak için Sorun, döngü oluşturmak ve dizinin otomatik olarak 2d dizisine eklenmesini istemektir.

cevap

25

Yazdığınız her programın başında use warnings; use strict; yerleştirin. Bu iki pragma senin için birçok hataları yakalayacak.

(...) posta kodlu bir diziye erişemezsiniz. Bu yapı, mysub(...) veya $mysubref->(...) işlevlerini çağırmak için kullanılır. Dizi öğelerine erişmek için [ index ] bir postfix kullanın. Ve Perl'de, çok boyutlu diziler her seviye için bir çift [...] gerektirir. Bunun nedeni, bir 2B dizinin basitçe her elemanın bir dizi olduğu bir dizidir.

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 

Sen Perl'in veri yapıları ve perldoc.perl.org de Perl geri kalanı hakkında daha fazla bilgi edinebilirsiniz. Dizilerin

perldsc Son olarak, @language.length sen öyle düşündüğün yapmaz İşte birkaç doğrudan bağlantılar vardır. @language, skaler bağlamda uzunluğunu bir sayı olarak alıyor ve sonra length($_) ile birleştiriyor. Ortaya çıkan ifade, (scalar @language) . length($_) gibi bir şeydir. <= işleci, argümanlarında skaler bağlam sağladığından, $id <= @language yazabilirsiniz. Ancak, Perl döngü bu tür yazma daha doğal bir yol sağlar:

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

yoksa gerçekten $language[scalar @language] beri $id < @language anlamına gelse

 
for my $id (0 .. $#language) {...} 
dizinin sonunun bir unsurdur.

+1

2d dizisindeki konsepti anlıyorum .. – JoT