引用具有指定索引的枚举器值

Sho*_* Ya 5 ruby enumerable

假设我有一个可枚举的对象enum,现在我想得到第三个项目.

我知道一种通用方法是转换为数组,然后使用索引访问:

enum.to_a[2]
Run Code Online (Sandbox Code Playgroud)

但是这种方式会创建一个临时数组,效率可能会很低.

现在我使用:

enum.each_with_index {|v, i| break v if i == 2}
Run Code Online (Sandbox Code Playgroud)

但这是非常丑陋和多余的.

最有效的方法是什么?

mu *_*ort 5

您可以使用take剥离前三个元素,然后last从数组中获取第三个元素,它们take为您提供:

third = enum.take(3).last
Run Code Online (Sandbox Code Playgroud)

如果您根本不想生成任何数组,那么可能:

# If enum isn't an Enumerator then 'enum = enum.to_enum' or 'enum = enum.each'
# to make it one.
(3 - 1).times { enum.next }
third = enum.next
Run Code Online (Sandbox Code Playgroud)


tok*_*and 5

使用enumerable-lazy或Ruby 2.1 替代mu的答案.像使用一样懒惰next但更具说明性:

enum.lazy.drop(2).first
Run Code Online (Sandbox Code Playgroud)