[Newbies] Re: How to empty a collection?

Klaus D. Witzel klaus.witzel at cobss.com
Tue Feb 19 07:32:47 UTC 2008


On Tue, 19 Feb 2008 02:35:34 +0100, Marcin Tustin wrote:

> Isn't Cedrick's aida solution going to be significantly faster?

No, solutions based on #become: are the slowest possible. The VM has to  
sweep the whole memory, for all variables in the system, to find all  
references during #become:, like this

  | oop |
  oop := self someObject.
  ["check+replace reference in variables of oop, then"
   oop := oop nextObject.
   oop = 0
   ] whileFalse.

Now think that you (and every other user of your software ;-) have an  
.image with 2-4gigs every time you use #become: ...

If you want something faster, look at Bert's

  myCollection removeAllSuchThat: [:each | true]

and try to make it faster but keep still it correct (old elements must be  
nil'ed).

/Klaus

> On Feb 19, 2008 1:02 AM, Ron Teitelbaum <Ron at usmedrec.com> wrote:
>
>> Hi Sophie,
>>
>> aCollection copy do: [:anElement |
>>        aCollection remove: anElement
>> ].
>>
>> Why copy?  If you start removing items from the collection, increasing  
>> the
>> index will cause you to skip elements.
>>
>> Ron
>>
>> > -----Original Message-----
>> > From: itsme213
>> >
>> > I want to clear its contents (size goes back to zero), and can't seem  
>> to
>> > find something like #clear or #empty. Cannot use a new collection as
>> there
>> > are shared references to it.
>> >
>> > Thanks - Sophie
>>
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>>




More information about the Beginners mailing list