Можно ли проверить положение итератора в 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 (и другие методы), чтобы получить интересные результаты.

Другие вопросы по тегам