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.tymchuk@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 ^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.