Perl 学习笔记 -- 利用施瓦兹变换对排序

在 perl 脚本中我们经常会对数组或者 hash 键 进行排序,以使输出的数据满足我们的要求,常用的是 sort 函数。但是对于字符串+数字 组成的一些值有时候就排序结果就不那么理想了。这时候 施瓦兹变换就要隆重登场了。

其经常用的有如下结构方式:

my @p = [...];
my @p_sort = map{$_->[0]}
    sort {$a->[1] <=> $b->[1]         # 按照第一列 / 第一个 [ 数值 ]    从小到大
            or $b->[2] <=> $a->[2]    # 按照第一列 / 第一个 [ 数值 ]    从大到小
            or $a->[3] cmp $b->[3]    # 按照第一列 / 第一个 [ 字符串 ]  从少到多
            or $b->[4] cmp $a->[4]    # 按照第一列 / 第一个 [ 字符串 ]  从多到少
            }
                map{ my @z = split (/\t/,$_); [$_,$z[1],$z[2] ]; }@p;

print "$_\n" foreach (@p_sort);

本代码的示例适用于多列,或者字符串与数字组成的 ID 之类的名称排序。

    原文作者:正踪大米饭儿
    原文地址: https://www.jianshu.com/p/1e18ff0891dd
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞