"Dave Thomas" <Dave / PragmaticProgrammer.com> wrote in message
news:m2d7cemh2r.fsf / zip.local.thomases.com...
> David Alan Black <dblack / candle.superlink.net> 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.
On the other hand you find that
p a[9] # => nil
p b[9] # => nil

the only difference is that
a.length # => 10
and
b.keys.length # => 2

but this is a (questionable?) artifact of Ruby's Array implementation
I think David's point was that vectors are functionally equivalent to
Hashes with key's in Fixnum (apart from this obscure artifact).

> However, I _would_ agree that both arrays and hashes might be
> derivable from some underlying collection class.
Agreed

Christoph