- Hash (해시)
- [참고] 해시에 대한 설명 : http://emzei.tistory.com/128
- 해시 변수
- 해시 함수
- 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;