有一个哈希:
h = {:a => "val1", :b => "val2", :c => "val3"}
我可以参考哈希值:
h[:a], h[:c]
但我想用数字索引来引用:
h[0] => val1
h[2] => val3
有可能吗?
答案 0 :(得分:33)
h.values
将为您提供所请求的数组。
> h.values
# ⇒ [
# [0] "val1",
# [1] "val2",
# [2] "val3"
# ]
UPD ,而h[h.keys[0]]
的答案被标记为正确,我对基准测试有点好奇:
h = {:a => "val1", :b => "val2", :c => "val3"}
Benchmark.bm do |x|
x.report { 1_000_000.times { h[h.keys[0]] = 'ghgh'} }
x.report { 1_000_000.times { h.values[0] = 'ghgh'} }
end
#
# user system total real
# 0.920000 0.000000 0.920000 ( 0.922456)
# 0.820000 0.000000 0.820000 ( 0.824592)
看起来我们正在吐出10%的生产力。
答案 1 :(得分:29)
h = {:a => "val1", :b => "val2", :c => "val3"}
keys = h.keys
h[keys[0]] # "val1"
h[keys[2]] # "val3"
答案 2 :(得分:5)
所以你需要数组索引和哈希索引吗?
如果您只需要第一个,请使用数组。
否则,您可以执行以下操作:
h.values[0]
h.values[1]