[Newbies] Iterating and removing items from OrderedCollections

Bert Freudenberg bert at freudenbergs.de
Thu Sep 18 08:44:49 UTC 2008


Am 18.09.2008 um 10:06 schrieb Ian J Cottee:

> Hello all
>
> I've got an OrderedCollection that is normally a fixed size (let's say
> 10 elements). Each element in the collection is another an object or
> nil. So for example, at a point in time it might look like
>
>  [nil, nil, Object, nil, Object, Object, nil, nil, Object, nil]
>
> What I want is to be able to resize the collection. Making it bigger
> is no problem for me, I can just add nils to the end of the
> collection. Making it smaller is involving a little bit of pain. I can
> see ways of doing it but theyr'e not elegant and I'm sure there are
> cleaner ways of doing it. If I made the above queue smaller I'd
> basically remove the nils starting from the beginning. So a resize to
> size 7 would give me
>
> [ Object, Object, Object, nil, nil, Object, nil]
>
> i.e. the first three nils have been removed.
>
> Does anybody have any comments on appropriate code to handle this? If
> not, I'll go with the ugly stuff but it would be nice to know the
> correct SmallTalk way.
>
> Many thanks for any suggestions.


I guess it doesn't get much more elegant and efficient than

	start := coll findFirst: [:each | each ~~ nil].
	coll removeFirst: start-1.

... unless you add a specific method to OC.

- Bert -




More information about the Beginners mailing list