hi Uko,

For Roassal, we have a #sortedAs: defined on all collections

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 SequenceableCollection>>sortedAs: aSortBlockOrSymbol
        "Answer a SortedCollection whose elements are the elements of the 
        receiver. The sort order is defined by the argument, aSortBlock."
        "Return a new collection. This method does not do a side effect"

        | aSortedCollection aSortBlock |
        aSortedCollection := SortedCollection new: self size.
        aSortBlock := 
                aSortBlockOrSymbol isSymbol 
                        ifTrue: [ [:a :b | |t1 t2|
                                                        t1 := (a perform: 
aSortBlockOrSymbol).
                                                        t2 := (b perform: 
aSortBlockOrSymbol).
                                                        ((t1 isKindOf: Boolean) 
and: [t2 isKindOf: Boolean])
                                                                ifTrue: [ t1 ]
                                                                ifFalse: [ t1 < 
t2 ] ] ]
                        ifFalse: [ 
                                (aSortBlockOrSymbol numArgs = 1)
                                        ifTrue: [ [ :v1 :v2 | 
(aSortBlockOrSymbol value: v1) < (aSortBlockOrSymbol value: v2) ] ]
                                        ifFalse: [ aSortBlockOrSymbol ] ].
        aSortedCollection sortBlock: aSortBlock.
        aSortedCollection addAll: self.
        ^ aSortedCollection
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

You can use it for example:
(1 to: 4) sortedAs: #odd 
        => a SortedCollection(1 3 2 4)

Collection withAllSubclasses sortedAs: #numberOfMethods
        => a SortedCollection(HashBag IdentityHashBag …)

This is really handy. It should be part of Pharo I believe.

Cheers,
Alexandre


On Mar 11, 2014, at 5:19 AM, Yuriy Tymchuk <yuriy.tymc...@me.com> wrote:

> Hi guys.
> 
> This is a thing that I encounter quite often.
> 
> Eg I have a collection of projects and I want to sort them by creation date. 
> It would be nice to be able to do something like:
> 
> projects sortByProp: #creationDate
> 
> or by birth date of the author
> 
> projects sortByProp: [ :proj | proj author birthDate ]
> 
> Maybe I’m wrong, but as I’ve told already I encounter it quite often and 
> writing something like
> 
> projects sortBy: [ :prev :next | prev creationDate <= next creationDate ]
> 
> is boring for me.
> 
> Cheers.
> Uko

-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.




Reply via email to