And when asking the object: #(1 2 4 5 6 7 2 1 4 3) asBag isDictionary
we get false. So, not, not a dictionary. I still have been using #valuesAndCounts to get the dictionary out of a bag on several occasions. And is useful indeed. #(1 2 4 5 6 7 2 1 4 3) asBag occurrencesOf: 2 and #(1 2 4 5 6 7 2 1 4 3) asBag valuesAndCounts at: 2 seem pretty much the same. But in this age of streams/reactive streams and lazy evaluations, what do we have in Pharo on that front? Phil On Wed, Mar 6, 2019 at 4:49 PM Sven Van Caekenberghe <s...@stfx.eu> wrote: > I was just explaining how it is now, what I think the rationale is behind > it. > > I understand #asDictionary as working on a collection of > pairs/associations (because it basically goes to #withAll:). > > A bag is just a collection that is optimised for many duplicates, the fact > that you have values and counts is more an implementation detail than an > intrinsic property. > > The conversion that you want, and that already exists in #valuesAndCounts > is one interpretation of what a bag is, not the only one. A bag is foremost > a collection of things. > > I am not immediately convinced that #valuesAndCounts should be the default > #asDictionary interpretation. > > What about the inverse for example ? > > { #foo->2. #bar->3 } asDictionary asBag. > > But this is certainly an interesting discussion. > > > On 6 Mar 2019, at 16:23, Tim Mackinnon <tim@testit.works> wrote: > > > > As Richard said - as a bag is relationship between keys and frequencies, > I would expect it to be able to convert to a dictionary. > > > > It displays in an inspector just like a Dictionary - which is why I > figured I could convert to pass it back to the exercise that was written > with Dictionaries in mind. > > > > <PastedGraphic-3.png> > > > > > > The code to fix it is quite simple, but on these kinds of things - I > thought it worth checking before submitting a PR. > > > > Tim > > > > > >> On 6 Mar 2019, at 13:53, Sven Van Caekenberghe <s...@stfx.eu> wrote: > >> > >> Why would that work ? What would you expect the output to be ? > >> > >> Try: > >> > >> #(1 2 3) asDictionary > >> > >> it fails in exactly the same way. You need key/value pairs > (Associations). > >> > >> These do work > >> > >> Bag new add: #foo->100; asDictionary. > >> > >> Bag new addAll: 'ABABABAAAA'; valuesAndCounts. > >> > >>> On 6 Mar 2019, at 14:25, Tim Mackinnon <tim@testit.works> wrote: > >>> > >>> I was surprised to find that a Bag can’t convert to a dictionary - e.g. > >>> > >>> Bag new > >>> addAll: 'aabbbbcddd’; > >>> asDictionary > >>> > >>> Gives an error - Dnu #key > >>> > >>> > >>> It looks to me like Bag is inheriting a bad version of > #associationsDo: and instead could simply forward it to #doWithOccurences: > instead? > >>> > >>> I know Bag is not used that much - but it comes up a lot in > programming exercises. > >>> > >>> Tim > >> > >> > > > > > >