in reply to Control loop 2D array

Like this? :)

#! perl -slw use strict; my @AoA = ( [ '1', '2', '10' ], [ '3', '4', '5' ], [ '6', '8', '11' ], [ '0', '7', '9' ], ); my @A = qw(0 0 0 0 1 2 0 0 1 0 1 0); my( $i, $j ) = ( 0, 0 ); $j++ < $#{ $AoA[ $i ] } or $i++, $j=0 while $i < @AoA and not $A[ $AoA[$i][$j] ]; ## Updated per [ysth]'s observation below print $i == @AoA ? 'not found' : "i:$i j:$j"; __END__ C:\test>junk i:0 j:2

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."

Replies are listed 'Best First'.
Re^2: Control loop 2D array
by ysth (Canon) on Jun 17, 2007 at 09:13 UTC
    How about a deobfuscated version?

      Not very satisfying because of the need to use a 'goto' to quit the loops early, and the need to duplicate the index vars because Perl localises them to loop even if they are pre-existing vars.

      I tried suggesting that the latter behaviour was a bug a while ago and got shouted down.

      #! perl -slw use strict; my @AoA = ( [ '1', '2', '11' ], [ '3', '3', '6' ], [ '6', '8', '11' ], [ '0', '7', '9' ], ); my @A = qw(0 0 0 0 1 2 0 0 1 0 1 0); my( $p, $q ); OUTER: for my $i ( 0 .. $#AoA ) { for my $j ( 0 .. $#{ $AoA[ $i ] } ) { ( $p, $q ) = ( $i, $j ) and last OUTER if $A[ $AoA[ $i ][ $j ] ]; } } print "i:$p j:$q";

      I'm not sure why you are using the outer loop below?


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
        I'm not sure why you are using the outer loop below?
        A different interpretation of "the first occurence to in the second array is not zero"; mine prints 1 1. No idea which interpretation (if either) is actually what is wanted.

        I like that your new version reports undefs instead of (@AoA, 0) if there is no match.