Notice
Recent Posts
Recent Comments
준호씨의 블로그
perl - sort hash. by key, by value. hash 정렬하기. 본문
반응형
다음과 같이 hash 데이터가 있다고 했을 때
my %fruits = (
"apple" => 500,
"orange" => 800,
"kiwi" => 600,
"ABC" => 100,
"BBC" => 100,
);
그냥 반복문으로 찍으면 다음과 같이 나온다.
for my $fruit (keys %fruits) {
print "$fruit, $fruits{$fruit}\n";
}
hash 데이터는 기본적으로 정렬을 보장하지 않는다.
$ perl sort.pl
BBC, 1000
kiwi, 600
apple, 500
orange, 800
ABC, 100
정렬을 해서 출력 하고 싶다면 정렬 기준을 잡아야 한다.
key 로 정렬하기. sort by key
단순한 방법이다. sort 만 넣어주면 된다.
for my $fruit (sort keys %fruits) {
print "$fruit, $fruits{$fruit}\n";
}
그러나 기본적으로 ASCII 테이블 기반이라
ABC, 100
BBC, 100
apple, 500
kiwi, 600
orange, 800
처럼 나온다. 대소문자 상관 없이 알파벳 순으로 정렬하려고 하면 sort {lc $a cmp lc $b} 처럼 좀 더 입력 해 준다. lc (lowercase) 로 소문자로 바꿔주고 비교 하는 것이다.
for my $fruit (sort {lc $a cmp lc $b} keys %fruits) {
print "$fruit, $fruits{$fruit}\n";
}
ABC, 100
apple, 500
BBC, 1000
kiwi, 600
orange, 800
value 로 정렬하기. sort by value
keys 대신 values 로 바꿔준다. (개인적으로 key 는 거의 항상 가져 오는 편이라 이 방식은 잘 안쓴다.)
for my $price (sort values %fruits) {
print "$price\n";
}
100
1000
500
600
800
뭔가 좀 이상하다. 숫자로 비교 한게 아니고 ASCII 문자로 비교 했기 때문이다.
숫자로 비교 하려면 다음과 같이 한다.
for my $fruit (sort { $a <=> $b } keys %fruits) {
print "$fruit, $fruits{$fruit}\n";
}
100
500
600
800
1000
key 를 value 를 기준으로 정렬하기.
value 를 기준으로 정렬 하면서 key 가 필요할 때는 다음과 같이 한다. 개인적으로 이 방법을 가장 많이 쓰는 편이다.
for my $fruit (sort { $fruits{$a} <=> $fruits{$b} } keys %fruits) {
print "$fruit, $fruits{$fruit}\n";
}
ABC, 100
apple, 500
kiwi, 600
orange, 800
BBC, 1000
참고
반응형
'개발이야기' 카테고리의 다른 글
perl - template toolkit (tt) 반복문 (0) | 2018.07.16 |
---|---|
javascript - date yyyymmdd, hhmmss, yyyymmddhhmmss, yyyymmddhhmm (0) | 2018.07.11 |
git clone 디렉토리 지정하기 (0) | 2018.07.10 |
osx - dyld: Library not loaded. Reason: image not found. DYLD_LIBRARY_PATH 설정 (0) | 2018.07.02 |
osx - lldb import six, import weakref 오류. 직접 설치한 python 2 제거 (0) | 2018.07.02 |
Comments