NOWS/Perl

day 7.

emzei 2016. 2. 4. 16:42



  • Hash (해시)
  • 해시 변수
  • 해시 함수
    • keys
    • values
    • each
    • delete
  • 해시 슬라이스




해시


  • 요소는 특별한 순서가 없음
  • (키, 밸류)



해시 변수

  • 해시변수이름 형식
    • 퍼센트기호가 맨 앞에 붙고 뒤에는 문자를 비롯한 숫자, 언더스코어를 붙임
  • 해시 요소 생성
    • 해시요소에 할당하면 새로운 요소 생성
    • 예) %alice 해시에 새로운 요소 추가 하는 경우,
      $alice{"key"} = "value"; # 키 "key" 에 해당하는 값 "value" 생성
      $alice{"key"}를 사용하면 해당하는 값("value")로 대체
    • 존재하지 않는 요소의 참조는 undef 리턴




해시의 리터럴

$alice{"abc"} = "bbb";
$alice{"hello"} = "world";

@alice_list = %alice; # @alice_list는 ("abc","bbb","hello","world"); 를 가짐
%bob = @alice_list; # %bob는 %alice와 동일

%bob = %alice; # 더 빠른 방법

%charlie = ("abc","bbb","hello","world"); 
# %charlie 를 리터럴 값을 통해 %alice처럼 생성

  • 키-값 쌍의 순서는 전개식 표현에서는 무작위 (컨트롤 안 됨)
  • winding-unwinding
    • winding - 해시 형식으로 감기
    • unwinding - 리터럴 리스트형식으로 풀기
  • reverse 연산자
    • 키와 값이 교환된 해시를 만들 수 있음
    • 예)
      %backwards = reverse %original;




해시 함수

  • keys
    • keys(%hash) : 해시%hash의 모든 key를 리턴
    • 해시 내 요소가 없다면 공백 리스트 리턴
    • 괄호는 옵션이므로 없어도 됨
      • keys %hash
      • keys(%hash)
  • values
    • values(%hash) : 해시%hash의 모든 value를 리턴
    • keys와 동일한 특성
  • each 
    • each(%hash)는 키-값 쌍을 리턴
    • 예)
      while (($key, $value) = each(%hash)){
          ...
      }
  • delete
    • 키-값 쌍을 제거
    • 예) delete $hash{"key"};





해시 슬라이스


  • 해시 요소의 묶음을 액세스하기 위함
$age{"alice"}=5;
$age{"bob"}=10;
$age{"charlie"}=15;
    • 줄이기 1단계
      • ($age{"alice"}, $age{"bob"}, $age{"charlie"}) = (5, 10, 15);

    • 줄이기 2단계 --> 해시 슬라이스 이용

      • @alice{ "alice", "bob", "charlie" } = ( 5, 10, 15 );

  • 해시 슬라이스를 이용한 해시 합치기

    • 작은 해시를 더 큰 해시로 합치기

      • 예) %age{keys %name} = values %name;


'NOWS > Perl' 카테고리의 다른 글

day 6.  (0) 2016.02.02
day 5.  (0) 2016.02.01
day 4.  (0) 2016.01.27
day 3.  (0) 2016.01.07
day 2.  (0) 2016.01.06