in reply to Re: help with an array of arrays
in thread help with an array of arrays

> a more functional approach

my @numbers = map $_->[1], @AoA;
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

Replies are listed 'Best First'.
Re^3: help with an array of arrays
by LanX (Saint) on Sep 15, 2018 at 09:41 UTC
    better?

    use strict; use warnings; use Data::Dump qw/pp dd/; use List::Util qw(min max); use constant { name=>0, num=>1 }; my @AoA = ( ["nick","99"], ["john","88"], ["peter","77"], ["thomas","99"] ); my $max_num = max map { $_->[num] } @AoA; my @max_names = map { $_->[name] } grep { $_->[num] == $max_num } @AoA; pp @max_names;

    and for completeness another variant

    my @max_names = map { $_->[num] == $max_num ? $_->[name] : () } @AoA;

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

      A question on this if I may:
      is it possible to do something similar to foreach for arrays, in array of arrays?. I mean, in the following code:
      my $min_diff_past = max (@all_date_diffs_past); for my $j ( 0 .. $#AoA_past ) { if ($AoA_past[$j][1]==$min_diff_past) { print $AoA_past[$j][0]."\t"; } }

      is there a way to not write the for loop but substitute it with a foreach loop or not?
        You want to replace c style for with list for?

        Try this

        my $min_diff_past = max (@all_date_diffs_past); for my $arr ( @AoA_past ) { if ($arr->[1]==$min_diff_past) { print $arr->[0]."\t"; } }
        (untested, you seem to confuse min and max)

        NB: The foreach keyword is actually a synonym for the for keyword, so you can use either.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        is there a way to not write the for loop but substitute it with a foreach loop or not?

        I don't really understand the question, but an answer to a literal interpretation of it is that in Perl, for-loops and foreach-loops are synonymous in (almost!) every case:

        c:\@Work\Perl\monks>perl -wMstrict -le "foreach (my $i = 2; $i < 10; $i += 3) { printf qq{$i }; } print '' +; for (my $i = 2; $i < 10; $i += 3) { printf qq{$i }; } print '' +; ;; foreach my $i (2 .. 5) { printf qq{$i }; } print ''; for my $i (2 .. 5) { printf qq{$i }; } print ''; ;; printf qq{$_ } foreach 6 .. 9; print ''; printf qq{$_ } for 6 .. 9; print ''; " 2 5 8 2 5 8 2 3 4 5 2 3 4 5 6 7 8 9 6 7 8 9
        The only case in which an initialize/test/finalize (or C-style) for/foreach loop cannot be used is the statement modifier form: something like
            printf qq{$i } for (my $i = 2;  $i < 10;  $i += 3);
        will not fly.


        Give a man a fish:  <%-{-{-{-<