Perl(펄)에서 정렬 하는 기능을 살펴 보겠습니다.
배열이나 해시에 값을 저장하여 사용하는 경우가 많습니다.
단순 배열이나, 해시의 경우를 정렬해야 하는 경우도 있지만 경우에 따라 다차원 배열이나 다차원 해시를 배열 해야 하는 경우도 있습니다.
또는 배열과 해시를 동시에 사용하는 배열이나 해시를 정렬 해야하는 경우도 있습니다.
여러가지 경우를 샘플로 작성하였습니다.
배열 숫자 정렬
my @arr = (3, 2, 8, 6);
foreach ( sort { $a <=> $b } @arr ){
print $_, "\n";
}
결과
2
3
6
8
해시 배열 정렬
my $hash_array_ref = [
{ name => 'test1', value => 3 },
{ name => 'test2', value => 2 },
{ name => 'test3', value => 8 },
{ name => 'test4', value => 6 },
];
foreach ( sort { $a->{value} <=> $b->{value} } @$hash_array_ref ){
print $_->{name}, ':', $_->{value}, "\n";
}
결과
test2:2
test1:3
test4:6
test3:8
해시 배열에 값을 기준으로 오름 차순 정렬을 하고 있습니다.
해시 정렬
my $hash_ref = {
test1 => 3,
test2 => 2,
test3 => 8,
test4 => 6,
};
foreach ( sort { $hash_ref->{$a} <=> $hash_ref->{$b} } keys $hash_ref ){
print $_, ':', $hash_ref->{$_}, "\n";
}
결과
test2:2
test1:3
test4:6
test3:8
배열 상태가 아닌, 해시를 정렬 하였습니다.
값을 기준으로 오름 차순 정렬을 했습니다.
다차원 해시 정렬
my $hash_hash_ref = {
test1 => { value => 3, hoge => 'fuga' },
test2 => { value => 2, hoge => 'fuga' },
test3 => { value => 8, hoge => 'fuga' },
test4 => { value => 6, hoge => 'fuga' },
};
foreach ( sort { $hash_hash_ref->{$a}->{value} <=> $hash_hash_ref->{$b}->{value} } keys $hash_hash_ref ){
print $_, ':', $hash_hash_ref->{$_}->{value}, "\n";
}
결과
test2:2
test1:3
test4:6
test3:8
2차원 해시로 정의된 해시를 정렬 했습니다.
정렬은 해시 값으로 오름 차순 정렬을 했습니다.
배열 안의 해시 정렬
my $array_hash_ref = {
test1 => [3, 'hoge'],
test2 => [2, 'hoge'],
test3 => [8, 'hoge'],
test4 => [6, 'hoge'],
};
foreach ( sort { $array_hash_ref->{$a}->[0] <=> $array_hash_ref->{$b}->[0] } keys $array_hash_ref ){
print $_, ':', $array_hash_ref->{$_}->[0], "\n";
}
결과
test2:2
test1:3
test4:6
test3:8
배열 안에 정의된 해시를 오름 차순으로 정렬 했습니다.
해시-배열-해시 정렬
my $hash_array_hash_ref = {
test1 => [ { value => 3 }, { fuga => 'hogera' } ],
test2 => [ { value => 2 }, { fuga => 'hogera' } ],
test3 => [ { value => 8 }, { fuga => 'hogera' } ],
test4 => [ { value => 6 }, { fuga => 'hogera' } ],
};
foreach ( sort { $hash_array_hash_ref->{$a}->[0]->{value} <=> $hash_array_hash_ref->{$b}->[0]->{value} } keys $hash_array_hash_ref ){
print $_, ':', $hash_array_hash_ref->{$_}->[0]->{value}, "\n";
}
결과
test2:2
test1:3
test4:6
test3:8
해시 안에 배열이, 그리고 다시 안에 해시로 정의된 것을 오름 차순으로 정렬 했습니다.
댓글