加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl高级排序

发布时间:2020-12-16 00:00:57 所属栏目:大数据 来源:网络整理
导读:高级排序 == Perl 的高级排序手段 语法: my @sorted_array = sort??sub_sort_method??@original_array; 这里的 sub_sort_method 就是我们制定的排序策略,一般是一个sub routine 的名字,或者其代码。 示例: my @result = sort by_number @some_numbers;??

高级排序

== Perl 的高级排序手段
语法:
my @sorted_array = sort??sub_sort_method??@original_array;
这里的 sub_sort_method 就是我们制定的排序策略,一般是一个sub routine 的名字,或者其代码。
示例:
my @result = sort by_number @some_numbers;??# sub by_number {$a <=> $b}
my @result = sort { $a <=> $b} @some_numbers;??#?<=> 符号表示数字的比较和排序?
my @descending = reverse sort { $a <=> $b} @some_numbers;
my @string = sort {$a cmp $b} @any_strings;??#?cmp 表示字符串的比较和排序?
my @string = sort {"L$a" cmp "L$b"} @any_strings;??#?L表示忽略大小写? Perl排序的理念是:你只要告诉他两个元素的比较关系(用-1,1表示),Perl就会为你完成任意长度的比较。 比如 {$a <=> $b} 其实表示的是 ??if ($a < $b) {-1} elsif ($a > $b) {1} else {0} <=>符号只是一个缩写。Perl只要知道我们的sort类型,就会为任意多个元素完成排序。 == 根据value对hash表的key值进行排序 首先,要理解我们无法对hash表进行排序,不然就不叫hash了。 不过,根据hash表的value我们可以为相应的key实现排序。示例如下 sub by_score {$score{$b} <=> $score{$a}};??# $b在前面是因为我们要从大到小降序排列 my %score = ('barney" => 195,"fred" => 205,"dino" => 30); my @ranking = sort by_score keys %score;??# 注意要这样阅读 sort by_score (keys %score) 注意,by_score不是对key直接做比较,而是根据key比较value,然后反过来对key进行排序。通俗的例子就是张三和李四光凭名字无法排 序,但是根据名字,我们找到他们的考试成绩,然后反过来,对名字进行排序。这就是??{$score{$b} <=> $score{$a}} 的工作。 == 二重排序与多重排序 前面的例子中,按照value进行了排名,但是如果value相同怎么办?如果我们希望对value相同的人按照字母顺序再细排,该怎么做呢?答案如下 sub by_score_and_name { ??{$score{$b} <=> $score{$a}}??# 按照value对key做降序排列 ??or ??$a cmp $b # 按照字母顺序再排序 } 其实意思也很好理解。因为value相同,因此比较结果返回0,这个时候结果就由 or 的另一部分来决定了。 上面的例子是二重排序。同理可以推导多重排序的方法。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读