Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 是否有一种优雅的Ruby方法可以从特定元素循环遍历数组并访问相应的索引?_Arrays_Ruby_Loops_Indexing - Fatal编程技术网

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
,但从您的评论来看,我不确定这是故意的。在我看来,总是使用两点比在这里使用两点,在那里使用三点会导致更少的错误。我是一个只使用两个点的编码器。这个用于嵌套循环的代码听起来像是你应该使用的…这个用于嵌套循环的代码听起来像是你应该使用的。。。