在Ruby中的每个do循环中是否有使用计数器变量的替代方法?

Bob*_*ob. 4 ruby

我在Ruby中输出数组中的项目列表.我需要输出数组中每个项目的位置以及值.我认为我通过使用值的索引很聪明,因为我循环遍历数组而不是设置临时计数器变量,但是当我有一个包含重复项的数组时,我被烧了.见下文...

array = ["a","b","c","a"]
array.each do |letter|
 puts "Position: #{array.index(letter)} - Letter: #{letter}"
end

# Position: 0 - Letter: a
# Position: 1 - Letter: b
# Position: 2 - Letter: c
# Position: 0 - Letter: a    # Oops! That's not the position of that item.
Run Code Online (Sandbox Code Playgroud)

低于生成所需输出的最有效方法,还是有更好的方法可以保持计数器变量赋值包含在每个do循环中?

array = ["a","b","c","a"]
counter = 0
array.each do |letter|
  puts "Position: #{counter} - Letter: #{letter}"
  counter += 1
end

# Position: 0 - Letter: a
# Position: 1 - Letter: b
# Position: 2 - Letter: c
# Position: 3 - Letter: a
Run Code Online (Sandbox Code Playgroud)

Nak*_*lon 11

array = ["a","b","c","a"]
array.each_with_index do |letter,i|
  puts "Position: #{i} - Letter: #{letter}"
end
Run Code Online (Sandbox Code Playgroud)

此外,如果您需要在map方法中使用此方法,则可以使用.with_index 修饰符:

["a","b","c","a"].map.with_index { |e,i| [e,i] }

=> [["a", 0], ["b", 1], ["c", 2], ["a", 3]]
Run Code Online (Sandbox Code Playgroud)