Я не могу придумать, как сделать это, используя collect
, но вы можете использовать Enumerable#bsearch_index
.
Если $days
является целым числом, это делает то же самое, что и ваш if
; но это не очень читабельно. (Целое число, поскольку существует небольшая проблема, связанная с тем, что вы используете два разных сравнения, и я предполагаю, что $days <= 20
совпадает с $days < 21
).
action_count[[0, 21].bsearch_index { |x| $days < x } || -1] += 1
bsearch_index
определяет, является ли $days
меньше 0
, 21
или ни того, ни другого, возвращая 0
, 1
или nil
. Мы заменяем случай nil
на -1
(последний элемент), и у нас есть индекс, который мы можем использовать для увеличения соответствующего элемента action_count
.