:
@list = sort { $a <=> $b } @list;
기본 정렬 함수는 cmp, 문자열 비교, w hich는 (1, 2, 10)을 (1, 10, 2)로 분류합니다. < =>은 수치 비교 연산자입니다.
정렬 기능을 원하는 부분을 꺼내기 위해 복잡한 기능이 필요한 경우 정렬 기능에서 처리하지 마십시오. 정렬 BLOCK은 동일한 요소에 대해 여러 번 호출 될 수 있기 때문에 먼저 꺼내십시오. 다음은 각 항목의 첫 번째 숫자 다음에 나오는 첫 단어를 빼내어 대소 문자를 구분하지 않는 방법의 예입니다. 또한 찌언 변환로 알려왔다 트릭을 사용하여,이 방법을 쓸 수
@idx =();
for (@data) {
($item) = /\d+\s*(\S+)/;
push @idx, uc($item);
}
@sorted = @data[ sort { $idx[$a] cmp $idx[$b] } 0 .. $#idx ];
는 :
@sorted = map { $_->[0] }
sort { $a->[1] cmp $b->[1] }
map { [ $_, uc((/\d+\s*(\S+)/)[0]) ] } @data;
여러 필드를 정렬해야하는 경우, 다음과 같은 패러다임에 유용합니다.
@sorted = sort {
field1($a) <=> field1($b) ||
field2($a) cmp field2($b) ||
field3($a) cmp field3($b)
} @data;
위의 주어진 키의 사전 계산과 편리하게 결합 할 수 있습니다.
이 접근 방법에 대한 자세한 내용은 http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz에있는 "알고 싶었던 것보다 멀리있는 것"모음의 정렬 기사를 참조하십시오.
나중에 해시 정렬에 대한 perlfaq4의 질문을 참조하십시오.
나는 간결함을 좋아한다! – Zaid
Schwartzian Transform을 수행해야합니다. 각 요소에 대해 두 번 비교할 부분을 다시 계산할 필요가 없습니다. 특히 형식이 딱딱하지 않은 경우. – dlamblin
조숙 한 최적화는 모든 악의 뿌리입니다. "substr"이 해시 검색보다 빠르거나 빠를 것이라고 생각하지 않습니까? – jrockway