Ruby数组reverse_each_with_index(带索引的反向查找)

kzipqqlq  于 2022-11-04  发布在  Ruby
关注(0)|答案(7)|浏览(174)

我想在数组上使用类似于reverse_each_with_index的代码。
示例:

array.reverse_each_with_index do |node,index|
  puts node
  puts index
end

我看到Ruby有each_with_index,但它似乎没有对立面。有没有其他方法可以做到这一点?

byqmnocz

byqmnocz1#

如果你想知道数组中元素的真实的索引,你可以这样做

['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
von4xj4u

von4xj4u2#

首先对数组reverse,然后使用each_with_index

array.reverse.each_with_index do |element, index|
  # ...
end

但是,索引将从0length - 1,而不是相反。

nszi6y05

nszi6y053#

既然Ruby总是喜欢给予你选择,你不仅可以做:

arr.reverse.each_with_index do |e, i|

end

但您还可以执行以下操作:

arr.reverse_each.with_index do |e, i|

end
pkmbmrz7

pkmbmrz74#

不复制阵列:

(array.size - 1).downto(0) do |index|
  node = array[index]
  # ...
end
yfwxisqw

yfwxisqw5#

简单地

arr.reverse.each_with_index do |node, index|
yizd12fk

yizd12fk6#

真实的正确的答案如下。

a = ['a', 'b', 'c']
a.each_with_index.reverse_each {|e, i|
  p [i, e]
}

这会产生以下输出。

[2, "c"]
[1, "b"]
[0, "a"]

顺便说一句,这至少在Ruby 1.9.3(大约2011年)和更高版本上有效。

xesrikrc

xesrikrc7#

在我的用例中,我想使用负索引向后迭代

a = %w[a b c] 
(1..a.size).each {|i| puts "-#{i}: #{a[-i]}"}

# => -1: c

# => -2: b

# => -3: a

相关问题