in reply to Re: How do I remove an element from any array while iterating over it in a loop?
in thread How do I remove an element from any array while iterating over it in a loop?

@ary = qw( 1 5 5 5 5 2 );
Would you care to revise your statement, senator? :)
   MeowChow                                   
               s aamecha.s a..a\u$&owag.print
  • Comment on (MeowChow) Re2: How do I remove an element from any array while iterating over it in a loop?
  • Download Code

Replies are listed 'Best First'.
Re: (MeowChow) Re2: How do I remove an element from any array while iterating over it in a loop?
by tachyon (Chancellor) on Aug 31, 2001 at 14:10 UTC

    This is how the original should have been and -w would have well warned me that it was broke. You need to understand that splice will change the length of an array and so to the index of the next element when in a loop. Public humiliation *again* as MeowChow walks up, LOL and saunters off :-)

    my @ary = qw( 0 1 5 5 5 0 5 5 5 1 0 ); $" = "~"; print "@ary\n"; my $deletions = 0; for my $i ( 0 .. $#ary ) { if ($ary[$i-$deletions] == 5) { splice @ary, ($i-$deletions), 1; $deletions++; } } print "@ary\n";

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

      Another item to be aware of. Removing every other element in a list through using splice is O(n*n). Using grep is O(n).

      In this case it probably doesn't matter. But with a lot of filtering operations that is a good item to be aware of.