Robert Klemme
8/23/2007 1:22:00 PM
2007/8/23, Ronald Fischer <ronald.fischer@venyon.com>:
> Let h be a Hash. Calculating the arrays
>
> k=h.keys
> v=h.values
>
> under the assumption that h is not modified
> in between, is it guaranteed that for all
> indices n
>
> h[k[n]]==v[n]
>
> i.e. that Hash#values delivers the values
> in the same order than Hash#keys delivers
> the respective keys?
>
> When playing around, I found this always
> the case, but can I rely on it?
If you need them in the same order, then the safest method is to
access them in one iteration, like:
irb(main):001:0> ha={:foo=>1, :bar=>2, :baz=>3}
=> {:foo=>1, :bar=>2, :baz=>3}
irb(main):004:0> keys, values = ha.inject([[],[]]) {|(ke,va),(k,v)|
[ke << k, va << v]}
=> [[:foo, :bar, :baz], [1, 2, 3]]
irb(main):005:0> keys
=> [:foo, :bar, :baz]
irb(main):006:0> values
=> [1, 2, 3]
HTH
robert