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