我需要返回
的前三个元素[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
。
答案 0 :(得分:5)
你可以使用一个懒惰的集合。类似的东西:
[1,2,3,4,5,6,7,8].lazy.select { |a| a.even? }.take(3)
您将获得Enumerator::Lazy
,但您可以在需要数据时使用to_a
或force
。