Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Re: Hash order bug?
Berger, Daniel
7/25/2006 2:13:00 PM
> -----Original Message-----
> From: Javier Valencia [mailto:jvalencia@log01.org]
> Sent: Tuesday, July 25, 2006 7:48 AM
> To: ruby-talk ML
> Subject: Re: Hash order bug?
>
>
> dblack@wobblini.net wrote:
>
> > Hi --
> >
> > On Tue, 25 Jul 2006, Javier Valencia wrote:
> >
> >> I have this piece of simple code:
> >>
> >> ----------------------------------------------
> >> def foo
> >> return 5
> >> end
> >>
> >> a = {:gr => false, :und => false, :det => true, :sta => false, :inv
> >> => false}
> >> puts a.inspect
> >> ----------------------------------------------
> >>
> >> when I execute it i get a totally unordered hash:
> >>
> >> ----------------------------------------------
> >> ruby pro.rb
> >> {:inv=>false, :gr=>false, :und=>false, :det=>true, :sta=>false}
> >> ----------------------------------------------
> >>
> >> Now, i delete the foo function from the code (the foo
> function don't
> >> do nothing at all), and i get a well ordered hash:
> >>
> >> ----------------------------------------------
> >> ruby pro.rb
> >> {:gr=>false, :und=>false, :det=>true, :sta=>false, :inv=>false}
> >> ----------------------------------------------
> >>
> >>
> >> What's happening? all my code is behaving wrong because of that.
> >
> >
> > Hashes are unordered. If you need an ordered collection,
> you'll need
> > to use an array.
> >
> >
> > David
> >
>
> Oh my god, i didn't know it, sorry. Is that a missing feature?
No, it's just the way hashes behave. Note that there are ordered hash
implementations on the RAA:
http://raa.ruby-lang.org/project/or...
You can also use a Struct to get roughly the same effect.
Regards,
Dan
This communication is the property of Qwest and may contain confidential or
privileged information. Unauthorized use of this communication is strictly
prohibited and may be unlawful. If you have received this communication
in error, please immediately notify the sender by reply e-mail and destroy
all copies of the communication and any attachments.
1 Answer
Hal E. Fulton
7/26/2006 12:36:00 AM
0
Berger, Daniel wrote:
>
>
> No, it's just the way hashes behave. Note that there are ordered hash
> implementations on the RAA:
>
>
http://raa.ruby-lang.org/project/or...
>
> You can also use a Struct to get roughly the same effect.
In case anyone tries to refer me to these, I'll point out that
there are *three* reasons I like a hash.
1. It indexes on an arbitrary value, not on an integer like
an array.
2. It consists of explicit pairings of key and value.
3. There is a convenient sybtax for literals:
{a=>b, c=>d, e=>f}
Note that there are *no* ordered hash solutions that preserve
the third criterion.
Most would require me to do something like:
oh = OrdHash.new(a,b, c,d, e,f)
or
oh = OrdHash.new([a,b], [c,d], [e,f])
or something just as bad.
Don't underestimate the importance of a convenient notation!
What if arrays in Ruby were like arrays in C? In C, you can
specify an array literal (barely) when you declare it; that's
about it.
Hal
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Re: Hash order bug?
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password