From: David Alan Black Date: 2001-02-20T09:43:00+09:00 Subject: [ruby-talk:11140] Re: Summary: RCR #U002 - proper new name fo r indexes On Tue, 20 Feb 2001, Dave Thomas wrote: > David Alan Black writes: > > > In spite of being an advocate of having two different names, I do > > agree that conceptually an array is essentially a hash on positive > > integers. (See for example [ruby-talk:6611] and [ruby-talk:6663].) > > In fact, looking at arrays and hashes that way makes me wonder about > > what *exactly* is common to them, and what implications that has. I > > keep thinking of a phantom module called "Hashable", and wishing it > > existed.... > > I'm not sure I agree that they are essentially the same. For example: > > a = [] > a[0] = 0 > a[10] = 10 > p a #=> [0, nil, nil, nil, nil, nil, nil, nil, nil, nil, 10] > > b = {} > b[0] = 0 > b[10] = 10 > p b #=> {0=>0, 10=>10} > > An array is a vector, while a hash is an indexed collection. Arrays > have key-ordering, while hashes are unordered. There's no question that they behave differently, and offer different functionality. But one could also look at ordered keys as a special case of non-ordered keys -- namely, a case where the keys automatically get sorted, in exchange for the constraint of their having to be integers. An array could be understood as a special-purpose hash, with extra intelligence in one area and restricted flexibility in others. > However, I _would_ agree that both arrays and hashes might be > derivable from some underlying collection class. In my non-existent, phantom scheme, being hashable (i.e., mixing in Hashable) would mean maintaining a collection of key/value pairs (tuples?). Every class that mixed in Hashable (e.g., Hash and Array) would implement constraints on its possible keys. (I don't know whether Hashable is a practical or useful idea -- I've gravitated toward it mainly as a way of mentally refactoring and picturing the common hashability of arrays and hashes.) David -- David Alan Black home: dblack@candle.superlink.net work: blackdav@shu.edu Web: http://pirate.shu.edu/~blackdav