We already have

* #withIndexCollect:
* #withIndexDo:


So why not #withIndexSelect: ?

#(#Object #subclass: #Point #instanceVariableNames:) withIndexSelect: [ :each 
:i | i \\ 2 = 0 ]

Peter

p.s. for every second you could also do
aCollection pairsCollect: [ :first :second | second ]


On Wed, Apr 19, 2017 at 04:35:07PM -0300, Esteban A. Maringolo wrote:
> 2017-04-19 16:17 GMT-03:00 Stephane Ducasse <[email protected]>:
> > why?
> > Iterators are powerful and avoid that we all reinvent the wheel in our own
> > corners.
> >
> > About keySelect: I do not see the point to convert a large collection into a
> > dictionary then do yet another pass.
> > To me it looks like a hack.
> 
> keySelect: would do a select based on the key (index in the case of
> SequenceableCollection) of the element, no need to create a
> Dictionary.
> 
> keySelect: aBlock
>   | result |
>   result := self species new.
>   self keysAndValuesDo: [:key :value |
>      (aBlock value: key) ifTrue: [result add: value]
>   ].
>   ^result
> 
> 
> You could implement #selectEverySecond or #selectEveryFirst in terms
> of the above. The name sounds weird though, but I'm not a native
> English speaker.
> 
> Regarding #unzip it's a different story, I wouldn't use 'zip' in a
> selector for non Zip (compression) related methods.
> 
> But do as you please, Pharo is yours as well ;)
> 
> Regards!
> 
> 
> > I implemented
> > selectEvery:
> > (selectFirst selectSecond) as helpers.
> >
> > and also unzip all in one pass.
> > Now I have no problem to keep them for me but to me this is the wrong
> > attitude.
> >
> > Stef
> >
> >
> > testSelectEveryFirst
> > self assert: (#(#Object #subclass: #Point #instanceVariableNames: 'x y'
> > #classVariableNames: '' #package: 'Kernel-BasicObjects') selectEveryFirst)
> > asArray equals: #(#Object #Point 'x y'  '' 'Kernel-BasicObjects')
> > testSelectEverySecond self assert: (#(#Object #subclass: #Point
> > #instanceVariableNames: 'x y' #classVariableNames: '' #package:
> > 'Kernel-BasicObjects') selectEverySecond) asArray equals: #(#subclass:
> > #instanceVariableNames: #classVariableNames: #package:)
> > testUnzip
> > | uz |
> > uz := #(#Object #subclass: #Point #instanceVariableNames: 'x y'
> > #classVariableNames: '' #package: 'Kernel-BasicObjects') unzip.
> > self assert: uz first asArray equals: #(#Object #Point 'x y'  ''
> > 'Kernel-BasicObjects').
> > self assert: uz second asArray equals: #(#subclass: #instanceVariableNames:
> > #classVariableNames: #package:)
> 
> 
> Esteban A. Maringolo
> 

Reply via email to