2013-07-16 4 views
2

배열 배열을 perl에 만들고 적절한 색인을 사용하여 각 구성원 배열에 액세스하는 방법은 무엇입니까? 다음 단계에서 i가 추가 작업을 수행 할 때문에perl에 배열 배열 만들기

for ($i=0;$i<$size;$i++) 
{ 
    @words = @synsets[$i]->words; 
    print "@words\n" 
} 

는하지만, 각각에 대응하는 어레이에 액세스하려는 각 반복 인쇄 그것을 갱신 현재 I는 일차원 배열을 사용하고

, "synset". 누군가 내가 그걸 어떻게 할 수 있는지 말해 줄 수 있습니까?

+0

;-) 나와 함께 부담해야 'foreach my $ i (0 .. $ size -1)'는 틀림없이 읽기 쉽습니다. (그리고'$ size - 1' 대신 @synsets의 마지막 항목의 색인을 제공하는'$ # synsets'을 사용할 수 있습니다) – plusplus

답변

0

Perl은 목록에 목록을 허용하지 않으므로 목록에 대한 참조 목록을 만들어야합니다.

$word = $sentences[0]->[0]; 

화살표

는하지만이 경우에는 생략 할 수 있습니다 :
@sentences =(); 
... 
    # in the loop: 
    push @sentences, \@words; 

는 다음을 수행 할 수 있습니다 개별 단어에 액세스 할 수 있습니다.

1

시도 :

for my $synset (@synsets){ 
    my @words = @$synset; 
    print "@words\n"; 
} 
1

여기에 기본을 보여주기 위해 작은 자체에 포함 된 파일입니다. 맞게 편집 :

Data::Dumper은 훌륭한 학습 도구 인 데이터 구조를 시각화하는 데 도움이됩니다.

[]"anonymous array constructor"의 역할을합니다. perldoc perlref을 사용하여 자세한 내용을 볼 수 있습니다 (또는 이전 링크 참조). 때때로 당신은 당신이 자신을 이해도 어느 정도 확신 할 수 있습니다 전에 다른 사람에게 뭔가를 설명, 그래서 당신은 같은 펄에서 더 많은 관용구 루프 for`는 C-스타일을`쓸 수

use 5.10.0 ; 
use Data::Dump; 
use strict; 
use warnings; 

my @AoA ; 

#my $file = "testdata.txt"; 
#open my ($fh), "<", "$file" or die "$!"; 
#while (<$fh>) { 
while (<DATA>) { 
    my @line = split ; 
    push @AoA, [@line] ; 
} 

say for @AoA; # shows array references 
say @{$AoA[0]}[0] ; # dereference an inner element 
foreach my $i (0..$#AoA) 
{ 
say "@{$AoA[$i]}[2..4]" ; # prints columns 3-5 
} 

dd (@AoA) ; # dump the data structure we created ... just to look at it. 

__DATA__ 
1 2 3 0 8 8 
4 5 6 0 7 8 
7 8 9 0 6 7 
+0

나는 그들의 사용에 대한 어떠한 권한도 주장하지 않지만 참조 및 익명 데이터 구조 (해시 및 배열) 유용 그래서 지금은 언제 * 잘 모르겠어 * 그들을 사용하지 않습니다. 그들은 [내가 좋아하는 라이너] (http://stackoverflow.com/a/17643714/2019415)를 쓸 때도 나타납니다. 'perl'에서 참조를 사용하는 좋은 가이드가 많이 있습니다. (예를 들어, 여기에 대한 토론은 http://stackoverflow.com/q/17414364/2019415를 참조하십시오.) - 경험과 친숙 함이 그렇게하는 법. –