Perl技巧 sort函数使用

前端之家收集整理的这篇文章主要介绍了Perl技巧 sort函数使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Perl中的sort函数是可以帮助我们解决排序问题的函数
主要格式分为2种:
  1. @sorted = sort @array;
  2. @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','skill','last'
        ];

猜你在找的Perl相关文章