Monday, January 09, 2006
Perl 펄] 해쉬: 최대값 최소값 가진 키 구하기
GetHashMax: 주어진 해쉬(Hash)에서, 가장 큰 숫자의 값(value)를 가진 키(key) 반환. 만약 동일값이 있으면 토정비결에 따라서 아무것이나 하나만 선택하여 반환.
GetHashMin: 위와는 반대로 최소값(Min).
해쉬 값 자체의 최대값 최소값이 아닌, 그러한 값을 가진 키를 구하는 것은 쉽지가 않았다. 펄이란 언어 자체가 워낙 복잡해서인지 잘 되지 않았다. 인터넷을 찾아보고 겨우 완성은 했는데 최적화가 되지 않아 엉성했다. 하루 이틀 정도 고민하다가 O'Reilly 출판사의 "Learning Perl"을 보고 해쉬에 대한 공부를 처음부터 다시 하고는 GetHashMax 와 GetHashMin 함수를 만들었다. 펄에서는 함수가 아닌 서브루틴으로 불리지만 값을 반환하니 함수로 지칭하는 것이 더 정확하다.
다음의 예제는 학생들의 점수가 들어 있는 간단한 데이터베이스에서 가장 높은/가장 낮은 점수를 가진 학생의 이름을 구하는 것이다. 만약 이것을 펄이 아닌 다른 언어로 만들었다면 몇 페이지 분량은 족히 되었을 것이다.
▶▶ [펄 기초] Perl 의, Hash (해쉬/해시) 정의, 사용법
▶▶ [Perl/펄] 배열(Array)에서, 최소값(Min) 최대값(Max) 구하기
GetHashMin: 위와는 반대로 최소값(Min).
해쉬 값 자체의 최대값 최소값이 아닌, 그러한 값을 가진 키를 구하는 것은 쉽지가 않았다. 펄이란 언어 자체가 워낙 복잡해서인지 잘 되지 않았다. 인터넷을 찾아보고 겨우 완성은 했는데 최적화가 되지 않아 엉성했다. 하루 이틀 정도 고민하다가 O'Reilly 출판사의 "Learning Perl"을 보고 해쉬에 대한 공부를 처음부터 다시 하고는 GetHashMax 와 GetHashMin 함수를 만들었다. 펄에서는 함수가 아닌 서브루틴으로 불리지만 값을 반환하니 함수로 지칭하는 것이 더 정확하다.
다음의 예제는 학생들의 점수가 들어 있는 간단한 데이터베이스에서 가장 높은/가장 낮은 점수를 가진 학생의 이름을 구하는 것이다. 만약 이것을 펄이 아닌 다른 언어로 만들었다면 몇 페이지 분량은 족히 되었을 것이다.
#!/usr/bin/perl
use strict; use warnings;
my %score = (
"밤톨이" => 30,
"맹구" => 0,
"땡칠이" => 65,
"똘똘이" => 98,
"영구" => 50,
);
print "Max: ", &GetHashMax(%score), "\n";
print "Min: ", &GetHashMin(%score), "\n";
sub GetHashMax {
%_ = @_;
@_ = sort { $_{$b} <=> $_{$a} } keys %_;
shift @_;
}
sub GetHashMin {
%_ = @_;
@_ = sort { $_{$a} <=> $_{$b} } keys %_;
shift @_;
}
use strict; use warnings;
my %score = (
"밤톨이" => 30,
"맹구" => 0,
"땡칠이" => 65,
"똘똘이" => 98,
"영구" => 50,
);
print "Max: ", &GetHashMax(%score), "\n";
print "Min: ", &GetHashMin(%score), "\n";
sub GetHashMax {
%_ = @_;
@_ = sort { $_{$b} <=> $_{$a} } keys %_;
shift @_;
}
sub GetHashMin {
%_ = @_;
@_ = sort { $_{$a} <=> $_{$b} } keys %_;
shift @_;
}
▶▶ [펄 기초] Perl 의, Hash (해쉬/해시) 정의, 사용법
▶▶ [Perl/펄] 배열(Array)에서, 최소값(Min) 최대값(Max) 구하기
tag: perl
Perl | 펄
<< Home