It's ultra-easy to port, I gave it a try at MCHttpRepository location: 'http://smalltalkhub.com/mc/nice/NiceVMExperiments/main' user: '' password: ''
See packages TAG-SortFunctions and TAG-SortFunctionsTests Travis didn't mention the license, so we'll have to ask him. 2014-03-12 13:52 GMT+01:00 Esteban A. Maringolo <emaring...@gmail.com>: > Is this multisort feature available for Pharo somewhere? > > Regards! > > > Esteban A. Maringolo > > > 2014-03-12 7:45 GMT-03:00 Nicolas Cellier < > nicolas.cellier.aka.n...@gmail.com>: > > I presume you all know about Griggs work on the subject > > > > > http://stackoverflow.com/questions/8204826/smalltalk-sort-a-collection-by-two-criteria > > http://objology.blogspot.com/2010/11/tag-sortfunctions.html > > > > > > 2014-03-12 11:23 GMT+01:00 carlo.t <snoob...@yahoo.ie>: > > > >> Hi Otto > >> > >> I think the main reason is to support the second usage scenario: > >> SequenceableCollection withAllSubclasses sortedAs: [:class | class > >> methodDict size]. > >> We could try and unify the sort: method to take only blocks while > >> sortedAs: > >> a symbol but then at the same time we could just put everything into one > >> method and use cull: perhaps to handle all the scenarios. > >> > >> Personally I don't feel too comfortable with the code below, apart from > >> the > >> performance penalties it also feels like code that is too 'clever' for > >> itself which obviously makes it complicated to understand and modify. I > >> wrote it mainly for people to voice opinions and get ideas flowing. I'd > >> have > >> 2 separate sort methods so that users can choose if they want the > runtime > >> characteristics of either. > >> > >> Example which can handle all current scenarios i.e. symbol or block > taking > >> 1 > >> or 2 arguments: > >> SequenceableCollection>>sort: aSortBlock > >> self > >> mergeSortFrom: 1 > >> to: self size > >> by: (self createSortBlock: aSortBlock) > >> > >> > >> SequenceableCollection>>createSortBlock: aSortBlockOrSymbol > >> ^ aSortBlockOrSymbol numArgs < 2 > >> ifTrue: [[ :a :b | (#(true false ) > >> includes: (aSortBlockOrSymbol > >> value: a)) > >> ifTrue: [ aSortBlockOrSymbol value: a] > >> ifFalse: [(aSortBlockOrSymbol value: a) > < > >> (aSortBlockOrSymbol value: > >> b)]]] > >> ifFalse: [[:a :b | aSortBlockOrSymbol cull: a cull: b]] > >> > >> > >> BTW the previous versions had a bug where it fails when called on an > empty > >> collection as the true/false check is done eagerly. > >> > >> Cheers > >> Carlo > >> > >> > >> > >> -- > >> View this message in context: > >> http://forum.world.st/Sort-by-property-tp4748500p4748757.html > >> Sent from the Pharo Smalltalk Developers mailing list archive at > >> Nabble.com. > >> > > > >