There are many books about Smalltalk. Stephane Ducasse has made many of them available as FREE pdfs. Of course Pharo by Example would be a good start. The latest edition of Pharo by Example I have ready to hand is 8.0, 2020, where what you want is chapter 13, Collections. aCollection do: [:element | ...] aKeyedCollection keysAndValuesDo: [:key :element | ...] dictionaries are keyed and so are sequences. You can iterate over the elements of any collection using #do: with a one-argument block. The elements will be passed to the block and the keys will NOT. If you want the keys, must use #keysAndValuesDo: with a two-argument block. The keys and corresponding elements will be passed to the block. You "AI buddy" is a treacherous lying ignorant bastard. Such is the start of AI. 1. Open a browser on Dictionary. 2. Select "enumerating" the the method category panel (top row, third from left). 3. In the method panel (top row, rightmost) you will see do: keysAndValuesDo: keysDo: valuesDo: 4. Selecting them one at a time you will see do: aBlock ^self valuesDo: aBlock keysAndValuesDo: aBlock ^self associationsDo: [:assoc | aBlock value: assoc key value: assoc value] keysDo: aBlock ^self associationsDo:: [:association | aBlock value: associatoin key] valuesDo: aBlock tally = 0 ifTrue: [^self]. 1 to: array size do: [:eachIndex | |eachAssociation| eachAssociation := array at: eachIndex. nil == eachAssociation ifFalse: [ aBlock value: eachAssociation value]]. Now to fully make sense of this, you'd have to understand how a Dictionary is implemented in Pharo. (An Array whose elements are reach either nil or an Association holding a key and a value. This is a traditional Smalltalk implementation of dictionaries, but others except and some are better.) But you CAN see quite easily from this code that #do:, #keysDo:, and #valuesDo: pass just one value to their block argument, while #keysAndValuesDo: passes TWO values. And this is typicalk of trying to glean understanding by looking at the system source code: it is easy, you won't undersand everything, but you'll learn *something*. On Wed, 24 Jan 2024 at 05:24, sergio ruiz <sergio.rrd@gmail.com> wrote:
I need to iterate over a dictionary.
I asked the AI buddy for a little help, and he says:
| myDictionary |
"Create a dictionary" myDictionary := Dictionary new. myDictionary at: 'one' put: 1. myDictionary at: 'two' put: 2. myDictionary at: 'three' put: 3.
"Iterate over the dictionary" myDictionary do: [ :key :value | Transcript show: key , ' -> ', value printString ; nl. ].
but when i try this, I get:
ArgumentsCountMismatch: This block accepts 2 arguments, but was called with 1 argument.
Is the AI using a different dialect of smalltalk?
how would I go about acting on each pair?
Thanks!
---- peace, sergio photographer, journalist, visionary
Public Key: https://pgp.key-server.io/pks/lookup?op=get&search=0x69B08F58923AB3A2 #BitMessage BM-NBaswViL21xqgg9STRJjaJaUoyiNe2dV @sergio_101@mastodon.social https://sergio101.com http://www.codeandmusic.com http://www.twitter.com/sergio_101 http://www.facebook.com/sergio101