Perl中的sort函数是可以帮助我们解决排序问题的函数。
主要格式分为2种:
@sorted = sort @array;
@sorted = sort{sub cmp} @array;
从官方文档来看,主要分文以下几种常用法则:
按字符的一般排序
@sorted = sort @array;
与上一种方法相同
@sorted = sort{$a cmp $b} @array;
按字符排序,不分大小写
@sorted = sort{fc($a) cmp fc($b)} @array;
按字符逆序排序,等同于reverse
@sorted = sort{$b cmp $a} @array;
比较数值的排序
@sorted = sort{$a <=> $b} @array;
比较哈希的值,得到key的数组
@sorted = sort{$age{$a} <=> $age{$b}} keys(%age);
同上一样的效果,用sub的写法
sub byage{
$age{$a} <=> $age{$b};
}
@sorted = sort byage keys(%age);
代码举例
#1 :
#! /usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my %hash = (
"li" => 3,
"wang" => 15,
"qing" => 9,
"hua" => 1
);
my @keys_arr = keys(%hash);
my @sorted_arr = sort{$hash{$a} <=> $hash{$b}} @keys_arr;
print Dumper(\@sorted_arr);
输出结果 :
dxxu@rlsj-dxxu:/home/dxxu>{102}perl sort_keyword.pl
$VAR1 = [
'hua',
'li',
'qing',
'wang'
];
#2 :
#! /usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @words = ("first", "aaa", "Asss", "new", "other", "skill", "jordan", "last");
print "sort normally ====\n";
my @normal_sorted = sort @words;
print Dumper(\@normal_sorted);
my @special_sorted = sort{
if ($a eq "first"){
return -1;
}
elsif($b eq "first"){
return 1;
}
elsif ($a eq "last"){
return 1;
}
elsif($b eq "last"){
return -1;
}
else{
return ($a cmp $b);
}
} @words;
print "sort specially ====\n";
print Dumper(\@special_sorted);
输出结果 :
sort normally ====
$VAR1 = [
'Asss',
'aaa',
'first',
'jordan',
'last',
'new',
'other',
'skill'
];
sort specially ====
$VAR1 = [
'first',
'Asss',
'aaa',
'jordan',
'new',
'other',
'skill',
'last'
];