asymertical behavior with where: and where:sortedBy:...
Hilaire Fernandes
hilaire at ofset.org
Fri Apr 4 14:04:40 UTC 2008
I found an asymmetrical behaviour in recurrent use
where:distinct:sortedBy:descending: compare to the use of recurrent where:
I get use to take a MagmaCollection and extract from it a small subset
in a reader. Then I get the reader passed from one object to another one
and eventually refined it with another where: message.
Being able to apply recursively where: query from one initial collection
is very very handy.
As long as you do that with where: it is fined. You can repeat over and
over where query with the same indexes of the initial collection.
However when applying with where:distinct:sortedBy:descending: then
indexes of the initial collection are lost (expect the one used for the
sort). It happens because the sort create a new MagmaCollection
I enclosed there a small fix. I expect it slows down a bit the sort
because of the recreated indexes in the new collection.
In the other hand, asymmetrical behaviour is not great at all.
May be we should have a fast sort (what we have now) and slower sort but
with the expected behaviour.
I am curious to read what Chris think about the issue.
Hilaire
-------------- next part --------------
'From Squeak3.9 of 26 December 2007 [latest update: #7068] on 4 April 2008 at 3:43:10 pm'!
!MagmaCollectionReader methodsFor: 'private' stamp: 'HilaireFernandes 4/4/2008 15:41'!
newReducedReaderOn: attribute makeDistinct: aBoolean
| newMc index |
"index := self indexNamed: attribute."
newMc := MagmaCollection new.
"newMc addIndex: index."
collection indexesDo: [:each | newMc addIndex: each].
collection isNewCollection
ifTrue:
[aBoolean
ifTrue: [self asSet do: [:each | newMc add: each]]
ifFalse: [self do: [:each | newMc add: each]]]
ifFalse:
[collection
load: newMc
from: self
makeDistinct: aBoolean].
^ newMc read: attribute! !
More information about the Magma
mailing list