2011-02-17 8 views
9

나는 내 코드 Perl에서 2D 배열을 만드는 방법은 무엇입니까?

에 2 차원 배열을 만들기 위해 노력하고 있습니다 : 그것은 비 반환

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 차원 배열을 반환하고자하기 때문이다. 나는 언어를 통해 위해 for 루프를 사용하고

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

: 나는 쿼리를 실행할 때, 그것은 나에게 같은 단어의 목록을 제공하기 때문에

업데이트

난 아직도 혼란 스러워요 데이터베이스에서 모든 단어를 얻으려면

문제는 루프를 원하고 배열이 자동으로 2 차원 배열에 추가되기를 원합니다.

답변

25

작성한 모든 프로그램의 맨 위에 use warnings; use strict;을 입력하십시오. 이 두 개의 pragma는 많은 오류를 catch합니다.

접미어 (...)으로 배열에 액세스 할 수 없습니다. 이 구성은 또는 $mysubref->(...) 함수를 호출하는 데 사용됩니다. 배열 요소에 액세스하려면 접미어 [ index ]을 사용합니다. Perl에서 다차원 배열은 각 레벨에 대해 한쌍의 [...]을 필요로합니다. 이는 2D 배열은 단순히 각 요소가 배열이기도 한 배열이기 때문입니다.

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에서 펄의 나머지 부분에 대해 자세히 알아볼 수 있습니다. 배열의

perldsc 마지막으로, @language.length 당신이 그것을하지 생각하지 않습니다 여기에 몇 가지의 직접 링크가 있습니다. 스칼라 컨텍스트에서 @language을 취합니다.이 컨텍스트의 길이는 숫자이며 length($_)으로 연결됩니다. 결과 표현식은 (scalar @language) . length($_)과 같습니다. <= 연산자가 인수에 스칼라 컨텍스트를 적용하기 때문에 $id <= @language을 쓸 수 있습니다. 그러나 펄은 이런 유형의 루프를 작성하는 더 자연스러운 방법을 제공합니다 :

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

또는 당신이 정말로 $language[scalar @language] 이후 $id < @language을 의미하는 경우

 
for my $id (0 .. $#language) {...} 
배열의 끝을지나 하나 개의 요소이다.

+1

2 차원 어레이의 개념을 이해합니다. – JoT

관련 문제