Можно ли проверить положение итератора в Ruby?
Есть ли способ получить позицию итератора (сколько раз он повторялся)?
values = (1..100)
values.each do |value|
if ... % 10 == 1 then puts iterator.count end
end
Или вы должны рассчитывать явно:
values = (1..100)
counter = 0
values.each do |value|
if counter % 10 == 1 then puts counter end
counter += 1
end
Есть ли более чистый подход?
Ruby 1.9.2
1 ответ
Решение
Использование each_with_index
values.each_with_index do |value, idx|
puts idx if idx % 10 == 1
# do something else
end
Или вы можете использовать более прохладную альтернативу
values.each.with_index do |value, idx|
# work
end
Я назвал это круче, потому что #with_index
является относительно менее известным, и его можно сочетать с map
(и другие методы), чтобы получить интересные результаты.