Ruby select方法:检查所选项目的数量

dav*_*000 2 ruby arrays algorithm methods

因此,Ruby有一个select方法,可以根据从块传入的条件从数组中选择元素.

例如

arr = [1,2,3,4]
arr.select {|x| x.even? } => [2, 4]
Run Code Online (Sandbox Code Playgroud)

我的问题涉及一个大型数组,我只想选择一定数量的项目.例如,在数组之外,我只想要匹配条件的前5个数字.

arr.select{|x| x.even?}[0...5]
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所拥有的.这非常慢,因为Ruby在选择前五个元素之前在整个数组上运行select函数.

我想看看是否有一种方法可以在选择前五个元素时停止选择功能.

例如,如果我能做到这一点

res = arr.select do |x|
  x.even? 
  break if self.length > 5
end
Run Code Online (Sandbox Code Playgroud)

在这种情况下,self是对res数组的引用.我不认为该引用会起作用,但我希望它能解决我的观点.

Зел*_*ный 6

在这种情况下,self是对res数组的引用.

selfRuby中的关键字使您可以访问当前对象 - 接收当前消息的对象.

我认为这是一份工作Enumerator::Lazy:

>> (1..100000).lazy.select { |x| x.even? }.first(5)
=> [2, 4, 6, 8, 10]
Run Code Online (Sandbox Code Playgroud)