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

해쉬의 일부를 추출하기

전종필

해쉬의 일부를 추출하여 다른 해쉬로 저장하기 위한 방법입니다.

%hash = (
        fruit => 'banana',
        animal => 'monkey',
        tree => 'pine tree',
        fish => 'salmon',
);

%newhash = map { ( $_, $hash{$_} ) } 'animal','fish';
phash(%newhash);

sub phash {
        my %h = @_;
        print join('-', map {($_,$h{$_})} sort keys %h), "\n";
}
위의 경우처럼 짧은 해쉬에는

%newhash = ( 'animal', $hash{animal}, 'fish' $hash{fish} );
라고 해도 별 문제가 없지만, 별도의 키 값을 긴 배열로 가지고 있다면, 일일이 목록으로 만들어 줄 수는 없고 while이나 foreach 루프로 돌려 줘야 하겠지요.

foreach my $k ( @long_array ) { $newhash{$k} = $hash{$k}; }
# 또는
while( shift @long_array ) { $newhash{$_} = $hash{$_}; }
위 스타일을 좋아하신다면 모르겠지만, 저라면 맨 처음의 map을 이용한 방법을 택하겠습니다. 그 쪽이 가독성이 높다고 생각되지 않습니까?

%newhash = map { ( $_, $hash{$_} ) } @long_array;
Comments