Вероятно, мне не хватает чего-то очевидного, но есть ли способ получить доступ к индексу / счетчику итерации внутри хеша каждого цикла?
hash = {'three' => 'one', 'four' => 'two', 'one' => 'three'}
hash.each { |key, value|
# any way to know which iteration this is
# (without having to create a count variable)?
}
ruby
enumerable
Upgradingdave
источник
источник
Ответы:
Если вы хотите знать индекс каждой итерации, вы можете использовать
.each_with_index
источник
hash.each_with_index { |(key,value),index| ... }
hash.each
парные скобки необходимы b / c дает каждую пару "ключ-значение" в файлеArray
. Парены делают то же самое(key,value) = arr
, что и первое значение (ключ)key
, а второе - вvalue
.each_with_index
перечисленных в RDoc для хеша: ruby-doc.org/core/classes/Hash.html . Теперь я вижу, что это член Enumerable. Но очень плохо, что RDoc не может ссылаться наeach_with_index
Hash.html.irb
и использую,ClassName#instance_methods
чтобы убедиться, что я ничего не пропустил.ClassName#instance_methods
очень помоглиВы можете перебирать ключи и получать значения вручную:
РЕДАКТИРОВАТЬ: за комментарий rampion, я также только что узнал, что вы можете получить как ключ, так и значение в виде кортежа, если вы выполните итерацию
hash
:источник
key
в первом цикле находится массив пары ключ + значение, поэтому использование его в качестве индексаhash
неверно. Вы когда-нибудь это тестировали?