我想reverse_each_with_index
在数组上使用类似的东西。
例子:
array.reverse_each_with_index do |node,index|
puts node
puts index
end
我看到 Ruby 有,each_with_index
但它似乎没有相反的东西。还有另一种方法可以做到这一点吗?
我想reverse_each_with_index
在数组上使用类似的东西。
例子:
array.reverse_each_with_index do |node,index|
puts node
puts index
end
我看到 Ruby 有,each_with_index
但它似乎没有相反的东西。还有另一种方法可以做到这一点吗?
如果你想要数组中元素的真实索引,你可以这样做
['Seriously', 'Chunky', 'Bacon'].to_enum.with_index.reverse_each do |word, index|
puts "index #{index}: #{word}"
end
输出:
index 2: Bacon
index 1: Chunky
index 0: Seriously
您还可以定义自己的 reverse_each_with_index 方法
class Array
def reverse_each_with_index &block
to_enum.with_index.reverse_each &block
end
end
['Seriously', 'Chunky', 'Bacon'].reverse_each_with_index do |word, index|
puts "index #{index}: #{word}"
end
优化版本
class Array
def reverse_each_with_index &block
(0...length).reverse_each do |i|
block.call self[i], i
end
end
end
首先reverse
是数组,然后使用each_with_index
:
array.reverse.each_with_index do |element, index|
# ...
end
虽然,索引将从0
到length - 1
,而不是相反。
好吧,既然 Ruby 总是喜欢给你选择,你不仅可以:
arr.reverse.each_with_index do |e, i|
end
但你也可以这样做:
arr.reverse_each.with_index do |e, i|
end
不复制数组:
(array.size - 1).downto(0) do |index|
node = array[index]
# ...
end
简单地
arr.reverse.each_with_index do |node, index|
在我的用例中,我想使用负索引向后迭代
a = %w[a b c]
(1..a.size).each {|i| puts "-#{i}: #{a[-i]}"}
# => -1: c
# => -2: b
# => -3: a