Stefan Lang wrote:

> 2009/2/12 James Coglan <jcoglan / googlemail.com>:
> > > 
> > > 
> > > 
> >> What do you mean with "Hash ordering"?
> >> An order for Hash instances? Hash doesn't define a <=> method.
> >> Or iteration order of Hash elements? That wasn't defined
> >> in 1.8.6 (I don't know if it is in 1.8.7).
> > 
> > 
> > 
> > In 1.8.6, iteration order would be the same as the order that the
> > keys appear in the source.
> 
> Iteration order is undefined, even for hash literals.
> This is on my machine:
> 
>     $ ruby -v -e '{2 => 0, 1 => 0}.each_pair { |k,v| p k }'
>     ruby 1.8.6 (2007-09-24 patchlevel 111) [x86_64-linux]
>     1
>     2
> 
> Your code happened to work by chance.
> 
> > To work with 1.8.7, you need to create an empty hash
> > and add keys one by one rather than putting them all in a hash
> > literal (see the patch).
> 
> Do I understand that the code relies on insertion order now?
> Then it's still working by chance in case it works at all.
> 
> Stefan

+1

Mr. Coglan seems not to understand how a hash-table is implemented.
One cannot predict the iteration order because he cannot know in which
bucket each element has been stored.  Furthermore, it makes no sense
at all to be concerned about iteration-order for a hash-table.

If one is concerned about iteration-order, he should use an
association-list.

An element is fetched a hash-table by key, not by position,
which is undefined.