ruby - 除了在 Ruby 的每个 do 循环中使用计数器变量之外,还有其他方法吗?

标签 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.

下面是生成所需输出的最有效方法,还是有更好的方法将计数器变量赋值包含在每个 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

最佳答案

array = ["a","b","c","a"]
array.each_with_index do |letter,i|
  puts "Position: #{i} - Letter: #{letter}"
end

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

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

=> [["a", 0], ["b", 1], ["c", 2], ["a", 3]]

关于ruby - 除了在 Ruby 的每个 do 循环中使用计数器变量之外,还有其他方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4101342/

相关文章:

javascript - Ruby on Rails 4 和 asset_path 的用法

mysql - 无法运行 rake 数据库 :create segmentation fault

ruby - 在 ruby​​ 顶层定义的方法在哪里?

ruby-on-rails - 事件管理员和自定义方法

ruby - Chef - Chef::Resource::Application 中的 NoMethodError

ruby - 用Ruby中的哈希值总结对象区域

ruby - 在 Ruby 中音译字符

javascript - 将 javascript 对象转换为 ruby​​ 哈希值

javascript - 使用 jquery 部分渲染时未定义的局部变量或方法 `f'

ruby - 我应该如何测试这种情况?