假设我有一个可枚举的对象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)
但这是非常丑陋和多余的.
最有效的方法是什么?
您可以使用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)
使用enumerable-lazy或Ruby 2.1 替代mu的答案.像使用一样懒惰next但更具说明性:
enum.lazy.drop(2).first
Run Code Online (Sandbox Code Playgroud)