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 >
