2013-09-06 5 views
0

3D 배열의 하위 배열 인 2D 배열에서 1D 배열을 푸시/푸시하려고합니다.Perl : 3D 하위 배열로 1d 배열 푸시

use Data::Dumper; 

# @arr_3d ; 
$arr_3d[0][0][0] = 1; 
$arr_3d[0][1][0] = 2; 
$arr_3d[0][0][1] = 4; 
$arr_3d[0][1][1] = 3; 
# @arr_1d ; 
$arr_1d[1] = "new1"; 
$arr_1d[0] = "new0"; 

print Dumper(\@arr_3d); 
unshift @{$arr_3d[0]},\@arr_1d; 
print Dumper(\@arr_3d); 

을 다른 말로하면, 우리는 3D 배열의 크기의 XYZ를 정의하고 우리가 "2D"취득 후 일정 X 고려하는 경우 : 당신은 내가 여기 복사, 이것은 더 명확하게 http://codepad.org/5s8Og64k의 예제 코드를 확인하실 수 있습니다 배열. 나는 1D 배열을 원래의 3D 배열의이 2D "서브 배열"로 밀어 넣고 싶습니다.

이 예제 코드는 실제로 하지만 내 주요 스크립트에 적용하려고하면 덤퍼 덤프 않는 것을 "$ VAR1 -> [0] [0]을"모든 이전의 장소에서 pushed- 마지막으로 푸시 인 1D 배열의 데이터 만 덤프합니다.

내가 설명하는 푸시를 수행하는 데 효과적 일 수있는 아이디어가 있습니까?

추가 정보 : 실제 데이터 구조는 루프 내에서 생성되고, 같은 :

$arr_1d[0]='a'; $arr_1d[1]='b'; # etc, etc.. 

: "@의 arr_1d는"단순히 지정하는 개별 요소가 될 생성

unshift @{$arr_3d[$index]},\@arr_1d; 
print @arr_1d; # This prints successfully the 1D array 

시간 내 주셔서 감사합니다. Giorgos

+0

음, 어떻게 구축하고 실제 데이터 구조는? 루프가 있습니까? – amon

+0

게시물 끝에 실제 데이터 구조 생성을위한 정보를 추가했습니다. 관심을 가져 주셔서 감사합니다. – user2405602

답변

3

어레이는 어레이를 포함 할 수 없습니다. 그래서 배열에 대한 참조를 배열에 배치합니다. 당신의 "주요 스크립트"에서

unshift @a, \@arr_1d; 
      ^
      | 

, 당신이 일반적으로 제대로 두 번 실행 따라서 두 변수를 생성됩니다 있도록 my 변수를 범위 지정에 의해 해결된다

my @arr_1d; 
for (...) { 
    ... 
    unshift @a, \@arr_1d; 
} 

같은 배열을 두 개의 참조를 가하고 있습니다 .

for (...) { 
    my @arr_1d; 
    ... 
    unshift @a, \@arr_1d; 
} 

다른 대안은 필요할 때 익명의 배열을 생성하기 []을 사용하는 것이다. ([ ... ]do { my @anon = (...); \@anon } 비슷합니다.)

my @arr_1d; 
for (...) { 
    ... 
    unshift @a, [ @arr_1d ]; 
} 
+0

내 문제를 해결하고 새로운 것을 가르쳐 주셔서 감사합니다. 정말로 당신의 종류! – user2405602