perl的排序和比较
来自:http://www.perlfect.com/articles/sorting.shtml
perl 比较操作符列表:
Numbers | Strings |
---|---|
< | lt |
> | gt |
<= | le |
>= | ge |
== | eq |
<=> | cmp |
!= | ne |
<=> 和cmp的详细解释:
Relation of $a and $b | Value Returned by $a <=> |
$a greater than $b | 1 |
$a equal to $b | 0 |
$a less than $b | -1 |
如果你有未排序的 @not_sorted,想得到排序的@sorted:
@sorted = sort { $a <=> $b } @not_sorted # numerical sort
or@sorted = sort { $a cmp $b } @not_sorted # ASCII-betical sort
or better@sorted = sort { lc($a) cmp lc($b) } @not_sorted # alphabetical sort
Get a list of hash keys sorted by value.
@sorted = sort { $hash{$a} cmp $hash{$b} } keys %hash;
Get a reverse sort of a list.
@sorted = sort { $b cmp $a } @list;
Which can also be done with@sorted = reverse sort { $a cmp $b } @list;
Get an alphabetical sort of words, but make 'aardvark' always come last.
(Now, why you would want to do that is another question...)(Now, why you would want to do that is another question...)@sorted = sort { if ($a eq 'aardvark') { return 1; } elsif ($b eq 'aardvark') { return -1; } else { return $a cmp $b; } } @words;
完!