Your explanation got me thinking that iterating in reverse might work...it does! array = [ "a", "b", "c" ] array.reverse_each do |item| array.delete(item) end
array => [] Sweeeet.... On Wed, Oct 14, 2009 at 9:40 AM, James Miller <[email protected]>wrote: > Kerry - I ended up just creating a new array and adding elements to it that > I do want, which works fine. Thanks for the explanation, makes sense. > David - Thanks for the explanation as well. There's more code involved in > the actual implementation, where the array will sometimes still contain > items and sometimes be emptied in the iteration. My example was just to > simplify and show the weirdness when trying to empty the array via iteration > rather than just setting to []. > > Thanks, > James > > > On Wed, Oct 14, 2009 at 9:31 AM, Kerry Foley <[email protected]>wrote: > >> >> Hi James, >> Strange right? Well, when you call delete within the loop it confuses >> each. The first time in you delete "a". The second time in you go to the >> 2nd element of the array, which is now "c" (not "b"). So you delete "c" >> and are left with array => ["b"]. >> >> I assume you are are doing other things within the loop so one way is to >> save the items you want to delete into another array i.e. to_be_deleted >> and then do the deleting once you have exited the loop. >> >> Regards, >> Kerry >> >> James Miller wrote: >> > Hi Everyone, >> > >> > Wondering if someone could explain why this doesn't work as (I) >> > expected... >> > >> > array = [ "a", "b", "c" ] >> > >> > array.each do |item| >> > array.delete(item) >> > end >> > >> > array => [ "b" ] >> > >> > Why isn't the array empty ( array => [] )? Is there a better approach? >> > >> > Thanks, >> > James >> > >> > >> > > >> >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby -~----------~----~----~----~------~----~------~--~---
