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