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....@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 >