I still am tempted to make asDictionary work - because the the moment you get a #key , DNU error - which is definitely not right.
So should Bag asDictionary give you a reasonable dictionary, or should it throw a proper exception - something like: DomainError signal: ‘#asDictionary not supported, use #valueAndCounts’ Is that better - or do we accept that it inherits it from Collection and so can do something useful? Tim > On 6 Mar 2019, at 18:11, p...@highoctane.be wrote: > > 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 > <mailto: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 > >> <mailto: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 > >> > >> > > > > >