Я хочу взять первые «n» записей, которые проходят блок
a = 1..100_000_000 # Basically a long array
# This iterates over the whole array -- no good
b = a.select{|x| x.expensive_operation?}.take(n)
Я хочу закоротить итерацию, как только у меня будет n записей, где «дорогое» условие истинно.
Что ты посоветуешь? take_while и вести подсчет n?
# This is the code i have; which i think can be written better, but how?
a = 1..100_000_000 # Basically a long array
n = 20
i = 0
b = a.take_while do |x|
((i < n) && (x.expensive_operation?)).tap do |r|
i += 1
end
end
x
, даже еслиx.expensive_operation?
ложно... это то, что вы хотите? - person Baldrick   schedule 28.10.2012