FuzzyDictionary random lookup dictionary
superclass: IdentityDictionary
put(key, obj) put an object into the dictionary. If there is already an object at that
key, the new object is added to the list of choices.
at(key) retrieve an object at a key.
If there is several, one of them is chosen at random.
removeAt(key, obj) remove an object from a certain key.
If there is several of the same kind, only one is removed
choose choose a key from all possible keys and then choose an object from it
doAt(key, function)
iterate over all elements at a certain key
keyAt(key) return the list of objects at a certain key
collect(func) return a new fuzzy dictionary with the items passed into the func.
arguments to the func: elem, key, index, listindex
// example
a = FuzzyDictionary.new;
// put the letters from a to j into the dictionary under their index
"abcdefghij".do { |c, i| a.put(i, c) };
a.postcs;
a.at(0)
a.at(1);
// now put the letters from l to u into the same indices
"lmnopqrstu".do { |c, i| a.put(i, c) };
// now at a certain index there is two objects, getting chosen at equal distribution
10.do { a[0].postln };
a[0] = 1000; // this could be any object.
10.do { a[0].postln };
// removing an object
a.removeAt(0, 1000);
10.do { a[0].postln };