例如,要返回我可以写的第10,000个素数:
require 'prime'
Prime.first(10000).last #=> 104729
Run Code Online (Sandbox Code Playgroud)
但是创建一个巨大的中间数组,只是为了检索它的最后一个元素感觉有点麻烦.
鉴于Ruby是如此优雅的语言,我会期待如下:
Prime.at(9999) #=> 104729
Run Code Online (Sandbox Code Playgroud)
但没有Enumerable#at.
以上解决方法是否有意或是否有更直接的方法来获取第n个元素Enumerable?
我能想到的最接近假设的at方法是drop跳过指定数量的元素.它尝试返回一个实际的数组,所以如果你使用无限序列,你需要将它与lazy组合,例如
Prime.lazy.drop(9999).first
Run Code Online (Sandbox Code Playgroud)
那这个呢?
Prime.to_enum.with_index(1){|e, i| break e if i == 10000}
# => 104729
Run Code Online (Sandbox Code Playgroud)
对于非懒惰的枚举器,您可能想要放置lazy枚举器.
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |