in reply to Re: Sorting array
in thread Sorting array

Hello,

First I want to thank you a lot for this elegant solution. I tested your code on a real life case and for some reason it doesn't work.

Here is the code:

#!/usr/bin/perl -w use strict; use warnings; use Data::Dumper; my @ar1=qw(F40_I_VBBG_RI50-FMVSS301n-2SR424M-HCH-D_01EK101.a3db F40_I_VBBG_RI50-FMVSS301n-2SR424M-HCH-D_01EK101a.a3db F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101g.a3db F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101k.a3db F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101.a3db ); #my @lastversion = values %{{ map { /EK(\d+)\w?/, $_ } sort @ar2 }}; my %latest; @latest{ /EK(\d+)\D/ } = $_ for sort @ar1; my @lastversion = @latest{sort {$a <=> $b} keys %latest}; foreach (@lastversion) { #print "@lastversion\n"; print "$_\n"; } #print Dumper(\%latest);

The correct output should be this:

F40_I_VBBG_RI50-FMVSS301n-2SR424M-HCH-D_01EK101a.a3db

F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101k.a3db

After i run the script i just get the first name:

F40_I_VBBG_RI50-FMVSS301n-2SR424M-HCH-D_01EK101a.a3db.

I really can't tell what the problem is. I am asking again for your help.

Thank you in advance.

Replies are listed 'Best First'.
Re^3: Sorting array
by poj (Abbot) on Dec 06, 2016 at 13:55 UTC
    I really can't tell what the problem is

    This regex /EK(\d+)\D/ captures only the numerics after the EK which is 101 for all the records. Expand the regex to capture the full key (less the last suffix letter if present).

    #!/usr/bin/perl -w use strict; use warnings; my @ar1 = qw( F40_I_VBBG_RI50-FMVSS301n-2SR424M-HCH-D_01EK101.a3db F40_I_VBBG_RI50-FMVSS301n-2SR424M-HCH-D_01EK101a.a3db F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101g.a3db F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101k.a3db F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101.a3db ); my %latest; for (sort @ar1){ if (/(.*?)[a-z]?\.a3db/){ $latest{$1} = $_; } else { warn "No match for $_"; } } print "$_\n" for reverse sort values %latest;
    poj
Re^3: Sorting array
by tybalt89 (Monsignor) on Dec 06, 2016 at 17:56 UTC

    I really can't tell what the problem is.
    The problem is you gave fake data for your problem instead of real data.

    fake data => fake solution

    (not to mention wasting time).

    #!/usr/bin/perl -l # http://perlmonks.org/?node_id=1177217 use strict; use warnings; my @ar1=qw(F40_I_VBBG_RI50-FMVSS301n-2SR424M-HCH-D_01EK101.a3db F40_I_VBBG_RI50-FMVSS301n-2SR424M-HCH-D_01EK101a.a3db F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101g.a3db F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101k.a3db F40_I_VBBG_LR50-ECR17p-2SR424M-HCH-D_01EK101.a3db ); print for values %{{ map { /(.*\d)[a-z]?\./, $_ } sort @ar1 }};