如何在尝试使用Ruby跟踪索引("i")时改进使用.each浏览数组的方式?

mar*_*cgg 0 ruby arrays

假设我做的很简单,.each但我仍然希望保持循环中的位置,我可以这样做:

i = 0
poneys.each do |poney|
  #something involving i
  #something involving poney
  i = i + 1
end
Run Code Online (Sandbox Code Playgroud)

这对我来说看起来不太优雅.所以我想我可以摆脱.each:

for i in 0..poneys.size-1 do
  #something involving i
end
Run Code Online (Sandbox Code Playgroud)

...或类似的不同语法.

问题是如果我想访问我必须做的对象:

for i in 0..poneys.size-1 do
  poney = poneys[i]
  #something involving i
  #something involving poney
end
Run Code Online (Sandbox Code Playgroud)

......那也不是很优雅.

有这么好的干净方式吗?

Tob*_*hen 13

您可以使用Enumerable#each_with_index

从官方文档:

对枚举中的每个项调用具有两个参数(项及其索引)的块.

hash = Hash.new
%w(cat dog wombat).each_with_index do |item, index|
    hash[item] = index
end
hash   #=> {"cat"=>0, "wombat"=>2, "dog"=>1}
Run Code Online (Sandbox Code Playgroud)