Thanks eliot.
 

On 11 Mar 2014, at 20:51, Eliot Miranda <eliot.mira...@gmail.com> wrote:

> and here's one with a better comment that includes examples
> 
> 
> On Tue, Mar 11, 2014 at 12:19 PM, Eliot Miranda <eliot.mira...@gmail.com> 
> wrote:
> Hi Alexandre,
> 
>     IMO the isKindOf:, apart from being ugly, will hurt performance badly.  
> Why not apply aSortBlockOrSymbol to the first element and then choose the 
> block appropriately?  e.g.
> 
>     aSortBlockOrSymbol isSymbol
>         ifTrue:
>             [(#(true false) includes: (self first perform: aSortBlockOrSymbol)
>                 ifTrue:
>                      [[:a :b | (a perform: aSortBlockOrSymbol)]]
>                 ifFalse:
>                      [[:a :b | (a perform: aSortBlockOrSymbol) < (b perform: 
> aSortBlockOrSymbol)]]]
>     ...
> 
> Nicer to read and faster, no?
> 
> On Tue, Mar 11, 2014 at 8:17 AM, Alexandre Bergel <alexandre.ber...@me.com> 
> wrote:
> 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
> ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.
> 
> 
> 
> 
> 
> 
> 
> -- 
> best,
> Eliot
> 
> 
> 
> -- 
> best,
> Eliot
> <SequenceableCollection-sortedAs.st>

Reply via email to