> On 28 Feb 2015, at 15:41, Philip Hazelden <philip.hazel...@gmail.com> wrote: > > I'm trying to represent something of the form "I've chosen one member of this > group, three members of that group, and nobody from the other group". A Bag > seems right for this, except that if I want to get the list of groups, it > doesn't seem to include the one with nobody: > > > Bag.new-from-pairs('a' => 0, 'b' => 3) > bag(b(3)) > > my $b = BagHash.new() > BagHash.new() > > $b<a> = 3 > 3 > > $b > BagHash.new(a(3)) > > $b<a> = 0 > 0 > > $b > BagHash.new() > > I was hoping for something like Python's Counter: > > >>> Counter({'a': 0, 'b': 3}) > Counter({'b': 3, 'a': 0}) > >>> b = Counter() > >>> b['a'] = 2 > >>> b > Counter({'a': 2}) > >>> b['a'] = 0 > >>> b > Counter({'a': 0}) > > I'm wondering if anyone has any bright ideas related to this. Two things come > to mind for myself: I could subclass Bag (or create a new implementation of > Baggy), but I'm not entirely sure how I'd do so sensibly (i.e. without > reimplementing basically the whole of Bag - operators, initializers, > stringifiers...); or I could create a new class which basically contains > nothing but a list and a bag whose keys are elements of the list.
An interesting thought for the non-mutable cases of Set, Bag and Mix. For the mutable cases (SetHash, BagHash, MixHash), setting the element to 0, is effectively deleting it. For the non-mutable case, I guess we could argue that *if* you specified it, it should exist as such. Will ponder about this… Liz