I need to access to a Hash in the same order that It was created:
mh=Hash.new()
mh["one"]="1"
mh["two"]="2"
mh["three"]="3"
mh["four"]="4"
mh.each {|val|
puts val[0]
}
In this example I get:
three
two
one
four
and I would like to get:
one
two
three
four
is that possible?
Thanks
on 2008-05-15 18:22
on 2008-05-15 18:29
Mario Ruiz wrote: > I need to access to a Hash in the same order that It was created: > is that possible? > > Thanks No.
on 2008-05-15 18:34
On May 15, 2008, at 10:22 AM, Mario Ruiz wrote: > } > three > four > > > is that possible? > > Thanks gem install orderedhash mh = OrderedHash.new ... ... etc. a @ http://codeforpeople.com/
on 2008-05-15 18:35
On May 15, 2008, at 10:22 AM, Mario Ruiz wrote:
> is that possible?
forgot to mention - 1.9 does this by default now.
a @ http://codeforpeople.com/
on 2008-05-15 18:37
ara.t.howard wrote:
> is that possible?
Hash preserves insertion order in Ruby 1.9
irb(main):026:0> RUBY_VERSION
=> "1.9.0"
irb(main):027:0> mh.each{|val| puts val[0]}
one
two
three
four
regards,
Tor Erik
on 2008-05-15 18:40
On Fri, May 16, 2008 at 01:22:56AM +0900, Mario Ruiz wrote: > I need to access to a Hash in the same order that It was created: [...] > is that possible? First off, this is not a hash. Hashes are inherently unordered. Hashes provide amortized O(1) insertion and retrieval of elements by key, and that's it. If you need an ordered set of pairs, use an array of arrays. Yes, this is a pet peeve of mine. There was an OrderedHash that someone wrote, but needing it is an indication of a design problem. It has also been obsoleted by the Dictionary in Ruby Facets. One could argue that, like Java, there should be a standard Dictionary interface that Hash implements, and that there should be another implementation that preserves order without guaranteeing anything about performance. That's not how things stand right now. > Thanks --Greg
on 2008-05-15 18:41
> mh["two"]="2" > one > four > > and I would like to get: > one > two > three > four > > > is that possible? No way with standard Hash, and it shouldn't be really. You can use an array instead of a hash, and Array#assoc to retrieve entries based on keys. Gennady.
on 2008-05-15 19:37
* Mario Ruiz <mario@betware.com> (18:22) schrieb: > } > three > four > > > is that possible? The Hash doesn't remember the order in which you put the values in. If the order is important not easily reconstructable, you have to store the keys in an Array. mfg, simon .... l
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.