Ruby 遍历枚举器的一部分(外部迭代器)?

Ruby 遍历枚举器的一部分(外部迭代器)?,ruby,enumerator,Ruby,Enumerator,如果我想要数组的一部分,我可以使用[]或拆分: arr = [1,2,3,4,5] arr[1..3] => [2, 3, 4] 但是是否有一个“通用”版本的[]?我可以将其应用于任何枚举器吗 enum = arr.each enum.xxx_method(1..3) # is equal to arr[1..3].each 当然,您可以直接使用arr[1..3]。但是我正在寻找一种处理任何枚举数的通用方法。如果你有一个枚举数,你可以使用可枚举方法drop和take: # abstra

如果我想要数组的一部分,我可以使用
[]
拆分

arr = [1,2,3,4,5]
arr[1..3]
=> [2, 3, 4]
但是是否有一个“通用”版本的
[]
?我可以将其应用于任何
枚举器吗

enum = arr.each
enum.xxx_method(1..3) # is equal to arr[1..3].each

当然,您可以直接使用
arr[1..3]
。但是我正在寻找一种处理任何枚举数的通用方法。

如果你有一个枚举数,你可以使用可枚举方法
drop
take

# abstract if necessary as enum_slice(range)
enumerator.drop(2).take(3)
如果该枚举数是一个不需要遍历的数组,请检查与以下内容相关的方法
array#lazy_slice

要求“可枚举/惰性”
类数组
def lazy_切片(范围)
Enumerator.new do | yielder|
每个do |索引的范围|
伊埃尔德
require 'enumerable/lazy'

class Array
  def lazy_slice(range)
    Enumerator.new do |yielder|
      range.each do |index|
        yielder << self[index]
      end
    end.lazy
  end
end

some_big_array = (0..10000).to_a # fake array, it won't generally be a range
p some_big_array.lazy_slice(9995..10000).map { |x| 2*x }.to_a
#=> [19990, 19992, 19994, 19996, 19998, 20000]