假设我有一个可枚举的对象enum
,现在我想获得第三个项目。
我知道一种通用方法是转换为数组,然后使用索引进行访问,例如:
enum.to_a[2]
但是这种方式会创建一个临时数组,并且可能效率低下。
现在我使用:
enum.each_with_index {|v, i| break v if i == 2}
但这是相当丑陋和多余的。
最有效的方法是什么?
假设我有一个可枚举的对象enum
,现在我想获得第三个项目。
我知道一种通用方法是转换为数组,然后使用索引进行访问,例如:
enum.to_a[2]
但是这种方式会创建一个临时数组,并且可能效率低下。
现在我使用:
enum.each_with_index {|v, i| break v if i == 2}
但这是相当丑陋和多余的。
最有效的方法是什么?
使用enumerable-lazy或 Ruby 2.1替代 mu 的答案。像 using 一样懒惰,next
但更具声明性:
enum.lazy.drop(2).first
不幸的是,要通过索引访问成员,必须将其转换为数组(否则你一开始就没有索引),所以你的代码对我来说看起来非常好。