in reply to Re: Using map function to print few elements of list returned by sort function
in thread Using map function to print few elements of list returned by sort function

Sorry to bug you with a follow up question. Is there a way we can nest two for loops in one line. For eg :

for $k (sort keys %h) { print $_->[1] for splice [sort {$b->[0]<=>$a->[0]} @{$h{$k}}], 0, 4 }

could be written something like:

print $_->[1] for splice [sort {$b->[0]<=>$a->[0]} @{$h{$k}}], 0, 4 fo +r keys %h

Replies are listed 'Best First'.
Re^3: Using map function to print few elements of list returned by sort function
by LanX (Saint) on May 25, 2014 at 23:02 UTC
    No, but you can chain maps.

    Cheers Rolf

    ( addicted to the Perl Programming Language)

      With your hint, I was able to do the following

      perl -F':' -lane ' push @{$h{$F[1]}}, [$F[0],$_] }{ print $_->[1] for map { splice [sort {$b->[0] <=> $a->[0]} @{$h{$_}}], +0,4 } keys %h' file 20470:ZM:Samfya:Africa 20149:ZM:Sesheke:Africa 18638:ZM:Siavonga:Africa 699385:ZW:Bulawayo:Africa 61739:ZW:Chinhoyi:Africa 47294:ZW:Chegutu:Africa 37423:ZW:Bindura:Africa

      Thanks LanX, your guidance was much appreciated.

        this can be simplified (and will work with older perl-versions)

        perl -F':' -lane ' push @{$h{$F[1]}}, [$F[0],$_] }{ print $_->[1] for map { ( sort {$b->[0] <=> $a->[0]} @$_ )[0..3] } val +ues %h' file 20470:ZM:Samfya:Africa 20149:ZM:Sesheke:Africa 18638:ZM:Siavonga:Africa 699385:ZW:Bulawayo:Africa 61739:ZW:Chinhoyi:Africa 47294:ZW:Chegutu:Africa 37423:ZW:Bindura:Africa

        Please note that countries with less than 4 cities will have empty lines.

        But I'd rather prefer chaining only maps...

        Cheers Rolf

        ( addicted to the Perl Programming Language)

        update

        to avoid empty lines skip the -l option

        perl -F':' -ane ' push @{$h{$F[1]}}, [$F[0],$_] }{ print $_->[1] for map { ( sort {$b->[0] <=> $a->[0]} @$_ )[0..3] } val +ues %h' file 20470:ZM:Samfya:Africa 20149:ZM:Sesheke:Africa 18638:ZM:Siavonga:Africa 699385:ZW:Bulawayo:Africa 61739:ZW:Chinhoyi:Africa 47294:ZW:Chegutu:Africa 37423:ZW:Bindura:Africa

        elaboration

        values instead of keys

        (List)[slice] instead of splice

        -l chomps and sets auto-newline in $\

      Thanks LanX for the hint. Will try it out now.