前言
本文主要记录一下,perl中的排序。
- sort函数
- 数字排序
- 哈希数组排序
14 排序
#==================================
# sort 默认按照ASCII对列表进行排序
#==================================
my @rocks = qw/ bed slat rub gran /;
my @sorted = sort(@rocks);
print "@sorted \n"; # bed gran rub slat
# 按照ASCII进行排序
my @nums = (20, 1, 10, 2);
my @result = sort @nums;
print "@result \n"; # 1 10 2 20
# 按照数值进行排序
my @result = sort {$a <=> $b} @nums;
print "@result \n"; # 1 2 10 20
# 按照指定的排序方式进行排序
sub by_number {
my($a, $b) = @_; #该条默认存在
#if($a < $b){-1;}elsif($a > $b){1;}else{0;} #该条语句与下边的等效
$a <=> $b; #飞船操作符
}
my @results = sort by_number @nums;
print "@result \n"; # 1 2 10 20
# 数字比较用飞船操作符<=> 字符串操作比较默认用cmp
$m = "Apple"; # A的ASCII是65
$n = "Dog"; # D的ASCII是68
print $m cmp $n; # -1
print "\n";
# 不区分大小写进行排序,通过\L将其转变成小写
my @results = sort qw(cat apple big Cat Dig);
print "@results \n"; #Cat Dig apple big cat
my @results = sort {"\L$a" cmp "\L$b"} qw(cat apple big Cat Dig);
print "@results \n"; #apple big cat Cat Dig
# 对哈希数组进行排序
my %elems = (B => 5, BE => 4, H => 1, He => 2, Li => 3);
my @result = sort keys %elems; # 按键进行排序
print "@result \n"; # B BE H He Li
sub by_value { $elems{$a} <=> $elems{$b} }
my @result = sort by_value keys %elems; # 按值进行排序
print "@result \n"; # H He Li BE B
my %score = ("barny" => 100, "fred" => 88, "dia" => 90);
my @winners = sort { $score{$b} <=> $score{$a} } keys %score; #按照分数进行排序
print "@winners \n"; #barny dia fred
#第一优先级按照分数排序,如果分数一样,第二优先级按照姓名排序
my %score = ("barny" => 100, "fred" => 88, "dia" => 90, "marry" => 90);
my @winners = sort { $score{$b} <=> $score{$a} or $a cmp $b } keys %score;
print "@winners \n"; #barny dia marry fred