Using Perl, how can I sort an array using the value of a number inside each array element?

前端 未结 4 1235
离开以前
离开以前 2020-12-17 04:53

Let\'s say I have an array, @theArr, which holds 1,000 or so elements such as the following:

01  \'12 16 sj.1012804p1012831.93.gz\'
02  \'12 16 sj.1012832p10         


        
4条回答
  •  无人及你
    2020-12-17 05:20

    Looks like you need a Schwartzian Transform:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    my @a = ;
    
    print 
        map  { $_->[1] }                #get the original value back
        sort { $a->[0] <=> $b->[0] }    #sort arrayrefs numerically on the sort value
        map  { /sj\.(.*?)p/; [$1, $_] } #build arrayref of the sort value and orig
        @a;
    
    __DATA__
    12 16 sj.1012804p1012831.93.gz
    12 16 sj.1012832p1012859.94.gz
    12 16 sj.1012860p1012887.95.gz
    12 16 sj.1012888p1012915.96.gz
    12 16 sj.1012916p1012943.97.gz
    12 16 sj.875352p875407.01.gz
    12 16 sj.875408p875435.02.gz
    12 16 sj.875436p875535.03.gz
    12 16 sj.875536p875575.04.gz
    12 16 sj.875576p875603.05.gz
    12 16 sj.875604p875631.06.gz
    12 16 sj.875632p875659.07.gz
    12 16 sj.875660p875687.08.gz
    12 16 sj.875688p875715.09.gz
    12 16 sj.875716p875743.10.gz
    

提交回复
热议问题