Возможно ли получить доступ к индексу в хеше каждого цикла? - PullRequest
115 голосов
/ 18 января 2010

Я, вероятно, упускаю что-то очевидное, но есть ли способ получить доступ к индексу / счету итерации внутри хэша каждого цикла?

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)?
}

Ответы [ 2 ]

280 голосов
/ 18 января 2010

Если вы хотите узнать индекс каждой итерации, вы можете использовать .each_with_index

hash.each_with_index { |(key,value),index| ... }
11 голосов
/ 18 января 2010

Вы можете перебирать ключи и извлекать значения вручную:

hash.keys.each_with_index do |key, index|
   value = hash[key]
   print "key: #{key}, value: #{value}, index: #{index}\n"
   # use key, value and index as desired
end

РЕДАКТИРОВАТЬ: за комментарий Rampion, я также только что узнал, что вы можете получить и ключ и значениекак кортеж, если вы перебираете hash:

hash.each_with_index do |(key, value), index|
   print "key: #{key}, value: #{value}, index: #{index}\n"
   # use key, value and index as desired
end
...