why_
why_

Reputation: 171

about ruby range?

like this

range = (0..10)

how can I get number like this:

0 5 10 

plus five every time but less than 10

if range = (0..20) then i should get this:

0 5 10 15 20

Upvotes: 17

Views: 6422

Answers (3)

efi
efi

Reputation: 162

The step method described in http://ruby-doc.org/core/classes/Range.html should do the job but seriously harms may harm the readability.

Just consider:

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

You may think that step(5) kind of produces a new Range, like why_'s question initially intended. But the each is called on the (0..20) and has to be replaced by another step(5) if you want to "reuse" the 0-5-10-15-20 range.

Maybe you will be fine with something like (0..3).map{|i| i*5}?

But "persisting" the step method's results with .to_a should also work fine.

Upvotes: 2

Amber
Amber

Reputation: 526583

Try using .step() to go through at a given step.

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

gives...

0 5 10 15 20

As mentioned by dominikh, you can add .to_a on the end to get a storable form of the list of numbers: (0..20).step(5).to_a

Upvotes: 28

name
name

Reputation: 41

Like Dav said, but add to_a:

(0..20).step(5).to_a # [0, 5, 10, 15, 20]

Upvotes: 4

Related Questions