我需要返回
[1, 2, 3, 4, 5, 6, 7, 8].select{|e| e % 2 == 0}
这是
[2, 4, 6]
,不需要尝试7
和8
。我希望它是这样的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_a
或force
。