是否有可能在Ruby中检查迭代器的位置?

B S*_*ven 1 ruby foreach iterator ruby-1.9.2

有没有办法获得迭代器的位置(它迭代了多少次)?

values = (1..100)
values.each do |value|
  if ... % 10 == 1 then puts iterator.count end
end
Run Code Online (Sandbox Code Playgroud)

或者你必须明确指望:

values = (1..100)
counter = 0
values.each do |value|
  if counter % 10 == 1 then puts counter end
  counter += 1
end
Run Code Online (Sandbox Code Playgroud)

有更清洁的方法吗?

Ruby 1.9.2

Ser*_*sev 9

使用 each_with_index

values.each_with_index do |value, idx|
  puts idx if idx % 10 == 1
  # do something else
end
Run Code Online (Sandbox Code Playgroud)

或者你可以使用更酷的替代品

values.each.with_index do |value, idx|
  # work
end
Run Code Online (Sandbox Code Playgroud)

我把它称为冷却因为#with_index相对较少知道它可以与map(和其他方法)结合产生有趣的结果.