Ответ 1
Класс Range поставляется с очень интересной функцией для этой цели:
1.9.3-p286 :005 > (1..10).step(2).to_a
=> [1, 3, 5, 7, 9]
Есть ли какой-нибудь классный способ в Ruby для создания массива с 1 по 100 с только нечетными записями (1, 3 и т.д.). У меня теперь есть цикл для этого, но это, очевидно, не крутой способ сделать это! Любые предложения?
Мой текущий код:
def create_1_to_100_odd_array
array = [1]
i = 3
while i < 100
array.push i
i += 2
end
array
end
Заранее спасибо
Класс Range поставляется с очень интересной функцией для этой цели:
1.9.3-p286 :005 > (1..10).step(2).to_a
=> [1, 3, 5, 7, 9]
Может быть неэффективным, но короткий фрагмент кода:
(1..100).select(&:odd?)
# => [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]
Простое...
(0...50).map(&:object_id)
#or
1.step(100,2).to_a
Так как вам нужна функция, то:
def odd_to(n)
(1..n).step(2).to_a
end
Не очень эффективное решение, но довольно элегантное:
(1..100).select {|a| a%2 != 0}
Вы можете сделать это как однострочный, когда вы создаете экземпляр массива:
def create_array_of_odds_to(n)
Array.new((n + 1) / 2) {|i| 2 * i + 1}
end
create_array_of_odds_to 10 # => [1, 3, 5, 7, 9]