Как получить значение хэша по числовому индексу У вас есть хэш: h = {:a => "val1", :b => "val2", :c => "val3"} Я могу ссылаться на значение хэша: h[:a], h[:c] но я бы хотел ссылаться на числовой индекс: h[0] => val1 h[2] => val3 Возможно ли это? Ответ 1 h = {:a => "val1", :b => "val2", :c => "val3"} keys = h.keys h[keys[0]] # "val1" h[keys[2]] # "val3" Ответ 2 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% производительности. Ответ 3 Итак, вам нужны индексирование массивов и индексирование хешей? Если вам нужен только первый, используйте массив. В противном случае вы можете сделать следующее: h.values[0] h.values[1]
Ответ 1 h = {:a => "val1", :b => "val2", :c => "val3"} keys = h.keys h[keys[0]] # "val1" h[keys[2]] # "val3"
Ответ 2 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% производительности.
Ответ 3 Итак, вам нужны индексирование массивов и индексирование хешей? Если вам нужен только первый, используйте массив. В противном случае вы можете сделать следующее: h.values[0] h.values[1]