perl学习笔记(十四)排序sort

文章目录


前言

本文主要记录一下,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

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值