in reply to (MeowChow) Re2: 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?

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

  • Comment on Re: (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 (tilly) 4: How do I remove an element from any array while iterating over it in a loop?
by tilly (Archbishop) on Sep 01, 2001 at 04:15 UTC
    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.