mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Friday, September 08, 2006

[펄 기초] Perl 의, Hash (해쉬/해시) 정의, 사용법


Hash (해쉬/해시)란?


펄에서, Hash (해쉬)는 배열의 일종이며, 간단한 데이터베이스 역할을 합니다.

해쉬 초기화 예제


국가명에 해당하는 수도명이 저장된 cities 라는 해쉬를 정의하려고 합니다.
#!/usr/bin/perl
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";


해쉬에 keys 함수를 사용하여, key 만 뽑아내어 @foo 라는 배열에 넣고
해쉬에 values 함수를 사용하여, value 만 뽑아내어 @bar 라는 배열에 넣었습니다.

배열이 아닌 일반 변수로 받으면, key의 개수를 얻을 수 있습니다. my $count = keys %cities; 라는 부분입니다.



실행 결과:

일본한국미국그리스프랑스
도쿄서울워싱턴아테네파리
5





▶▶ [Perl] 해쉬: 최대값 최소값 가진 키 구하기

▶▶ [Perl] 디버깅용 해쉬 덤프 (Hash Dump)




tag: perl
Perl | 펄

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top