109 lines
2.5 KiB
Markdown
109 lines
2.5 KiB
Markdown
# 해시
|
|
|
|
해시는 키/값 쌍의 집합입니다.
|
|
|
|
## 해시의 생성
|
|
|
|
```perl
|
|
# 각각의 키에 대응하는 값을 하나하나 할당하며 생성합니다.
|
|
$ages{'Charlie'} = 14;
|
|
$ages{'Steve'} = 37;
|
|
$ages{'Jane'} = 22;
|
|
|
|
# 배열과 유사하게 키와 값을 번갈아 가며 정의합니다.
|
|
%ages = ('Charlie', 14, 'Steve', 37, 'Jane', 22);
|
|
|
|
# 콤마로 구분하는 대신 =>를 사용하면 코드가 좀 더 명확해집니다.
|
|
%ages = ('Charlie'=> 14, 'Steve'=> 37, 'Jane'=> 22);
|
|
|
|
# 키에 따옴표 없이 사용해도 되지만, 이 경우에는 키에 공백 문자가 없어야 합니다.
|
|
%ages = (Charlie=> 14, Steve=> 37, Jane=> 22);
|
|
```
|
|
|
|
## 해시 요소의 참조
|
|
|
|
해시 요소를 참조할 때에는 중괄호`{}`를 사용합니다.
|
|
|
|
```perl
|
|
%ages = ('Charlie'=> 14, 'Steve'=> 37, 'Jane'=> 22);
|
|
|
|
print "Charlie: $ages{'Charlie'}\n";
|
|
print "Steve: $ages{'Steve'}\n";
|
|
print "Jane: $ages{Jane}\n"; # 따옴표로 묶지 않아도 됩니다.
|
|
```
|
|
|
|
## 요소의 삽입과 제거
|
|
|
|
해시에 새로운 항목을 삽입하려면 단순히 할당문을 사용하면 됩니다. 해시에서 아이템을 제거하려면 delete를 사용합니다.
|
|
|
|
```perl
|
|
# 해시에 새로운 아이템을 삽입합니다.
|
|
$ages{'Julie'} = 7;
|
|
|
|
# 해시에서 아이템을 제거합니다.
|
|
delete $ages{'Steve'};
|
|
```
|
|
|
|
## 키 배열
|
|
|
|
- keys HASH
|
|
|
|
해시의 키를 배열로 반환합니다.
|
|
|
|
- values HASH
|
|
|
|
마찬가지로, 해시의 값을 배열로 반환합니다.
|
|
|
|
|
|
```perl
|
|
%ages = ('Charlie'=> 14, 'Steve'=> 37, 'Jane'=> 22);
|
|
|
|
@keys = keys %ages;
|
|
@values = values %ages;
|
|
|
|
print "@keys\n"; # Charlie Jane Steve
|
|
print "@values\n"; # 14 22 37
|
|
```
|
|
|
|
## 해시의 크기
|
|
|
|
해시의 크기는 키 배열 또는 값 배열의 크기와 같으므로, 다음과 같은 방식으로 해시의 크기를 알 수 있습니다.
|
|
|
|
```perl
|
|
%ages = ('Charlie'=> 14, 'Steve'=> 37, 'Jane'=> 22);
|
|
|
|
@keys = keys %ages;
|
|
$size_of_hash = @keys;
|
|
```
|
|
|
|
## 존재 여부
|
|
|
|
- exists ITEM
|
|
|
|
해시의 어떤 요소가 유효한지를 확인하려면 exists를 사용합니다.
|
|
|
|
```perl
|
|
%ages = ('Charlie'=> 14, 'Steve'=> 37, 'Jane'=> 22);
|
|
if(exists($ages{'Julie'})){
|
|
print "exists.\n";
|
|
} else {
|
|
print "not exists.\n";
|
|
}
|
|
```
|
|
|
|
|
|
## 부분 집합
|
|
|
|
```perl
|
|
%ages = ('Charlie'=> 14, 'Steve'=> 37, 'Jane'=> 22);
|
|
|
|
%slice = %ages{'Charlie', 'Steve'};
|
|
```
|
|
|
|
아래와 같이하면, 부분 해시의 값을 배열로 구할 수 있습니다.
|
|
|
|
```perl
|
|
%ages = ('Charlie'=> 14, 'Steve'=> 37, 'Jane'=> 22);
|
|
@values = @ages{'Charlie', 'Steve'}; # @ages입니다, %가 아니라.
|
|
print "@values\n"; # 14 37
|
|
``` |