Tips in Action‎ > ‎배열과 Hash‎ > ‎

배열의 해쉬, 해쉬의 배열

전종필

배열의 해쉬나 해쉬의 배열은 배열의 배열이나, 해쉬의 해쉬의 경우와 마찬가지로 리퍼런스(참조)를 이용합니다.
원리가 같으므로, 내용은 위 두가지 팁을 참조하시고, 여기에는 예문만 제시합니다.

@trees = qw( 소나무 참나무 상수리나무 오리나무 );
@fruit = qw( 사과 배 감 포도 );
@vegit = qw( 상추 시금치 토마토 );
%all = (
	tree => \@trees,
	fruit => \@fruit,
	vegit => \@vegit
);
print $all{tree}->[1], "\n"; # 참나무
print "@{$all{fruit}}\n"; # 사과 배 감 포도
이름없는 배열(anonymous array)을 사용하면

%all = (
	tree => [ qw( 소나무 참나무 상수리나무 오리나무 ) ],
	fruit => [ qw( 사과 배 감 포도 ) ],
	vegit => [ qw( 상추 시금치 토마토 ) ]
);
입니다.
해쉬의 배열은 이름없는 해쉬(anonymous hash)를 이용하여 다음과 같이 만들 수 있습니다.

@classschedule = (
	{ name=>'국어', teacher=>'김국어', place=>'교실' },
	{ name=>'영어', teacher=>'Jason', place=>'교실' },
	{ name=>'영어', teacher=>'Jason', place=>'시청각실' },
	{ name=>'국어', teacher=>'김국어', place=>'교실' },
	{ name=>'윤리', teacher=>'박도덕', place=>'생활관' },
	{ name=>'컴터', teacher=>'펄아비', place=>'전산실' }
);
$i = 1;
foreach my $hashref ( @classschedule ) {
	print $i++, "교시 - $hashref->{name} 교사: $hashref->{teacher} ($hashref->{place})\n";
}
print "제일 재미있는 수업: $classschedule[$#classschedule]->{name}\n"; # 끝나는 시간이니까
print "점심식사 후 수업장소: $classschedule[4]->{place}\n";
foreach를 @classschedule에 대해 적용하였을 때, $hashref는 해쉬의 리퍼런스라는 점을 새겨두시기 바랍니다.
따라서 $hashref->{name}과 같이 ->{}를 사용합니다. 
Comments