문제

나는 Perl에 조금 새로운 것이지만 여기에 내가하고 싶은 일이 있습니다.

my @array2d;
while(<FILE>){
  push(@array2d[$i], $_);
}

이후로 컴파일하지 않습니다 @array2d[$i] 배열이 아니라 스칼라 값입니다.

@array2d를 배열 배열로 어떻게 선언해야합니까?

물론, 나는 내가 얼마나 많은 행을 가지고 있는지 전혀 모른다.

도움이 되었습니까?

해결책

배열 배열 또는 더 정확하게 배열 배열을 만들려면 다음과 같은 것을 시도하십시오.

my @array = ();
foreach my $i ( 0 .. 10 ) {
  foreach my $j ( 0 .. 10 ) {
    push @{ $array[$i] }, $j;
  }
}

그것은 당신을 위해 값을 불쾌한 배열로 밀어 넣습니다. 다음과 같은 항목에 액세스 할 수 있어야합니다.

print $array[3][2];

다른 팁

"푸시"라인을 이것으로 변경하십시오.

push(@{$array2d[$i]}, $_);

당신은 기본적으로 @{}에 의해 주변을 둘러싼 배열을 $ array2d [$ i]를 만들고 있습니다. 그러면이 배열의 배열에 요소를 푸시 할 수 있습니다.

살펴보십시오 Perlref 그리고 perldsc 배열 배열 및 해시 해시와 같은 중첩 데이터 구조를 만드는 방법을 확인합니다. Perl을 할 때 매우 유용한 것들.

당신이 쓴 것과 이것 사이에는 실제로 차이가 없습니다.

@{$array2d[$i]} = <FILE>;

파일을 통해 반복한다고 가정 할 수 있습니다.

카운터를 추적하지 않으려면 다음을 수행 할 수 있습니다.

...
push @array2d, [ <FILE> ];
...

1) 빈 배열에 대한 참조를 작성하고, 2) 모든 줄을 파일에 저장, 3) 밀어 넣습니다. @array2d.

또 다른 간단한 방법은 해시 테이블을 사용하고 두 배열 지수를 사용하여 해시 키를 만드는 것입니다.

$two_dimensional_array{"$i $j"} = $val;

배열에 파일을 저장하려는 경우 다음을 수행 할 수도 있습니다.

fopen(FILE,"<somefile.txt");
@array = <FILE>;
close (FILE);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top