如何通过数字索引获取哈希值

Les*_*iev 29 ruby hash

哈希:

h = {:a => "val1", :b => "val2", :c => "val3"}
Run Code Online (Sandbox Code Playgroud)

我可以参考哈希值:

h[:a], h[:c]
Run Code Online (Sandbox Code Playgroud)

但我想用数字索引来引用:

h[0] => val1
h[2] => val3
Run Code Online (Sandbox Code Playgroud)

可能吗?

Ale*_*kin 33

h.values 会给你一个请求的数组.

> h.values
# ? [
#  [0] "val1",
#  [1] "val2",
#  [2] "val3"
# ]
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

看起来我们正在吐出10%的生产力.


sai*_*ala 29

h = {:a => "val1", :b => "val2", :c => "val3"}
keys = h.keys

h[keys[0]] # "val1"
h[keys[2]] # "val3"
Run Code Online (Sandbox Code Playgroud)


Int*_*idd 5

那么你需要数组索引和哈希索引吗?

如果只需要第一个,请使用数组.

否则,您可以执行以下操作:

h.values[0]
h.values[1]
Run Code Online (Sandbox Code Playgroud)