Arrays 是否有一种优雅的Ruby方法可以从特定元素循环遍历数组并访问相应的索引?
我想在数组中的任何位置(例如)开始Arrays 是否有一种优雅的Ruby方法可以从特定元素循环遍历数组并访问相应的索引?,arrays,ruby,loops,indexing,Arrays,Ruby,Loops,Indexing,我想在数组中的任何位置(例如)开始arr中的最后两个元素,并访问元素及其各自的索引1,2 有没有更优雅的方法? 无需使用带索引变量i和while的标准方法(如下) arr = [82,217,170] i = 3 while i < arr.length puts "#{arr[i]}" + " " + "#{i}" end 输出: 2170 arr.each_with_index.drop(1).each { |e, i| pu
arr
中的最后两个元素,并访问元素及其各自的索引1,2
有没有更优雅的方法?
无需使用带索引变量
i
和while
的标准方法(如下)
arr = [82,217,170]
i = 3
while i < arr.length
puts "#{arr[i]}" + " " + "#{i}"
end
输出:
2170
arr.each_with_index.drop(1).each { |e, i| puts "#{e} #{i}" }
# 217 1
# 170 2
您还可以在索引中zip
:
arr.zip(0 .. arr.length-1).drop(1).each { |e, i| puts "#{e} #{i}" }
但这种额外的复杂性并没有多大意义。或者你可以这样说,直截了当地说:
(1 .. arr.length-1).each { |i| puts "#{arr[i]} #{i}" }
但这可能符合“带索引变量的循环”的条件。如果使用索引调用反转drop
和的位置,您将有:
arr.each_with_index.drop(1).each { |e, i| puts "#{e} #{i}" }
# 217 1
# 170 2
您还可以在索引中zip
:
arr.zip(0 .. arr.length-1).drop(1).each { |e, i| puts "#{e} #{i}" }
但这种额外的复杂性并没有多大意义。或者你可以这样说,直截了当地说:
(1 .. arr.length-1).each { |i| puts "#{arr[i]} #{i}" }
但这可能符合“带索引变量的循环”的条件。每个带索引的循环都不使用参数来指定起始索引<代码>带有索引
不起作用。这是一个来自枚举器的方法,所以让我们用每个
创建一个
arr = [82,217,170]
start_at = 1
arr[start_at..-1].each.with_index(start_at){|item,i|puts "#{item} #{i}"}
# 217 1
# 170 2
每个带有索引的\u
不采用参数来指定起始索引<代码>带有索引
不起作用。这是一个来自枚举器的方法,所以让我们用每个
创建一个
arr = [82,217,170]
start_at = 1
arr[start_at..-1].each.with_index(start_at){|item,i|puts "#{item} #{i}"}
# 217 1
# 170 2
arr.each_with_index
这段代码是否返回一个数组?否,它给您一个枚举数
。但是arr.each_with_index.drop(1)
留给您一个数组
。最后一个解决方案似乎最适合我的情况。我并不是要避免所有的索引变量。我只是在避免在循环外实例化变量并递增。。。例如while loopsRight中的,谢谢。真尴尬。你也可以使用(1…arr.length)
(不是三个点),但我看不到那么多的三个点范围。mu,我想推荐你使用1。。arr.length-1而不是1。。。arr.length
,但从您的评论来看,我不确定这是故意的。在我看来,总是使用两点比在这里使用两点,在那里使用三点会导致更少的错误。我是一个只有两个点的编码器。arr.each_与_索引
这段代码是否返回数组?不,它给你一个枚举数
。但是arr.each_with_index.drop(1)
留给您一个数组
。最后一个解决方案似乎最适合我的情况。我并不是要避免所有的索引变量。我只是在避免在循环外实例化变量并递增。。。例如while loopsRight中的,谢谢。真尴尬。你也可以使用(1…arr.length)
(不是三个点),但我看不到那么多的三个点范围。mu,我想推荐你使用1。。arr.length-1而不是1。。。arr.length
,但从您的评论来看,我不确定这是故意的。在我看来,总是使用两点比在这里使用两点,在那里使用三点会导致更少的错误。我是一个只使用两个点的编码器。这个用于嵌套循环的代码听起来像是你应该使用的…这个用于嵌套循环的代码听起来像是你应该使用的。。。