Подтвердить что ты не робот

Как получить значение хэша по числовому индексу

У вас есть хэш:

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

Я могу ссылаться на значение хэша:

h[:a], h[:c]

но я бы хотел ссылаться на числовой индекс:

h[0] => val1
h[2] => val3

Возможно ли это?

4b9b3361

Ответ 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]