Вы были почти там.Просто используйте break
с параметром:
[1, 2, 3, 4, 5, 6].each_with_object([]) do |element, acc|
acc << element if element > 3
break acc if acc.size >= 2
end
Другой способ сделать это - использовать Enumerator::Lazy
с array.lazy.select
или явный экземпляр Enumerator
сEnumerable#take
(здесь это определенное излишество, публикация в основном в образовательных целях.)
enum =
Enumerator.new do |y|
i = [1, 2, 3, 4, 5, 6].each
loop { i.next.tap { |e| y << e if e > 3 } }
end
enum.take(2)
#⇒ [4, 5]
Sidenote: оба приведенных выше примера перестанут проходить ввод, как только будут найдены два элемента.