о рубиновом диапазоне? - PullRequest
       11

о рубиновом диапазоне?

16 голосов
/ 06 апреля 2010

вот так

range = (0..10)

как мне получить такой номер:

0 5 10 

плюс пять каждый раз, но меньше 10

если диапазон = (0..20) тогда я должен получить это:

0 5 10 15 20

Ответы [ 3 ]

25 голосов
/ 06 апреля 2010

Попробуйте использовать .step() для прохождения на данном шаге.

(0..20).step(5) do |n|
    print n,' '
end

дает ...

0 5 10 15 20

Как уже упоминалось dominikh, вы можете добавить .to_a в конце, чтобы получить сохраняемую форму списка номеров: (0..20).step(5).to_a

4 голосов
/ 06 апреля 2010

Как сказал Дав, но добавь к_a:

(0..20).step(5).to_a # [0, 5, 10, 15, 20]
2 голосов
/ 06 апреля 2010

Метод step, описанный в http://ruby -doc.org / core / classes / Range.html , должен выполнять эту работу, но серьезно вредит может нанести вред читабельность.

Просто учтите:

(0..20).step(5){|n| print ' first ', n }.each{|n| print ' second ',n }

Вы можете подумать, что шаг (5) порождает новый диапазон, как изначально предполагалось для вопроса Why_ *1017*. Но каждый вызывается в (0..20) и должен быть заменен другим шагом (5), если вы хотите «повторно использовать» диапазон 0-5-10-15-20.

Может быть, вам будет хорошо с чем-то вроде (0..3).map{|i| i*5}?

Но" сохраняются " Результаты метода шага с .to_a также должны нормально работать .

...