我需要返回

[1, 2, 3, 4, 5, 6, 7, 8].select{|e| e % 2 == 0}

这是[2, 4, 6],不需要尝试78。我希望它是这样的
select_some([1, 2, 3, 4, 5, 6, 7, 8], 3){|e| e % 2 == 0}

我有如下解决方案:
def select_some(array, n, &block)
  gather = []
  array.each do |e|
    next unless block.call e
    gather << e
    break if gather.size >= n
  end
  gather
end

但是ruby有没有内置的东西来执行这个短切呢?请不要建议我将方法修补到数组上以实现array.select_some

最佳答案

你可以用一个懒散的收集。类似于:
[1,2,3,4,5,6,7,8].lazy.select { |a| a.even? }.take(3)
您将得到一个Enumerator::Lazy返回,但是您可以在需要数据时使用to_aforce

10-06 05:14