Friday, September 08, 2006
[펄 기초] Perl 의, Hash (해쉬/해시) 정의, 사용법
Hash (해쉬/해시)란?
펄에서, Hash (해쉬)는 배열의 일종이며, 간단한 데이터베이스 역할을 합니다.
해쉬 초기화 예제
국가명에 해당하는 수도명이 저장된 cities 라는 해쉬를 정의하려고 합니다.
#!/usr/bin/perl
use strict; use warnings;
my %cities = (
"한국" => "서울",
"일본" => "도쿄",
"그리스" => "아테네",
"미국" => "워싱턴",
"프랑스" => "파리",
);
# 위와 같이 소괄호로 해쉬를 정의한 후, 세미콜론(;)을 찍어야 합니다
print $cities{"미국"}, "\n";
use strict; use warnings;
my %cities = (
"한국" => "서울",
"일본" => "도쿄",
"그리스" => "아테네",
"미국" => "워싱턴",
"프랑스" => "파리",
);
# 위와 같이 소괄호로 해쉬를 정의한 후, 세미콜론(;)을 찍어야 합니다
print $cities{"미국"}, "\n";
해쉬(Hash)를 정의할 때는 해쉬 이름 앞에 퍼센트(%) 기호를 붙입니다. 그래서 "my %cities = (..." 이렇게 됩니다.
그러나 해쉬의 각 요소에 접근할 때에는 일반 변수처럼 $기호를 사용하고, {} 이런 중괄호 즉 Curly Braces 를 붙입니다. 이제 해쉬를 데이터베이스처럼 사용할 수 있습니다.
위에서, $cities{"미국"} 이라는 변수는 "워싱턴"이라는 값을 가집니다. 위의 예제를 실행하면 화면에, 워싱턴이 출력됩니다. "미국" 등의 국가명을 key 라고 부르고, "워싱턴" 등의 값을 value 라고 부릅니다.
key 는 항상 문자열로 간주됩니다. 설령 key가 123 같은 숫자로 되어 있어도, 123은 숫자가 아닌 문자로 간주됩니다.
숫자 123 과 문자열 "123" 은, 같은 key로 간주되기에,
my %cities = (
123 => "파리",
"123" => "일이삼",
);
key 를 이렇게 지정하는 것은 잘못된 것입니다. 같은 key 를 두 번 초기화한 것입니다.
펄의 해쉬는 컴퓨터의 메모리가 남아 있는 한, 무한히 계속 추가할 수 있습니다. 메모리의 할당 같은 것은 전혀 신경 쓸 필요없습니다.
해쉬에는 순서가 없습니다. 위의 경우, 한국, 일본... 순으로 정의했지만 이런 순서 자체는 결코 저장되지 않습니다. 해쉬의 항목들의 순서는 아무 의미가 없습니다.
해쉬에서, key 와 value 만 뽑아내기
#!/usr/bin/perl
use strict; use warnings;
my %cities = (
"한국" => "서울",
"일본" => "도쿄",
"그리스" => "아테네",
"미국" => "워싱턴",
"프랑스" => "파리",
);
# key 만 추출
my @foo = keys %cities;
# value 만 추출
my @bar = values %cities;
# 키의 개수를 알아내기
my $count = keys %cities;
print @foo, "\n";
print @bar, "\n";
print $count, "\n";
use strict; use warnings;
my %cities = (
"한국" => "서울",
"일본" => "도쿄",
"그리스" => "아테네",
"미국" => "워싱턴",
"프랑스" => "파리",
);
# key 만 추출
my @foo = keys %cities;
# value 만 추출
my @bar = values %cities;
# 키의 개수를 알아내기
my $count = keys %cities;
print @foo, "\n";
print @bar, "\n";
print $count, "\n";
해쉬에 keys 함수를 사용하여, key 만 뽑아내어 @foo 라는 배열에 넣고
해쉬에 values 함수를 사용하여, value 만 뽑아내어 @bar 라는 배열에 넣었습니다.
배열이 아닌 일반 변수로 받으면, key의 개수를 얻을 수 있습니다. my $count = keys %cities; 라는 부분입니다.
실행 결과:
일본한국미국그리스프랑스
도쿄서울워싱턴아테네파리
5
▶▶ [Perl] 해쉬: 최대값 최소값 가진 키 구하기
▶▶ [Perl] 디버깅용 해쉬 덤프 (Hash Dump)
tag: perl
Perl | 펄
<< Home