Ruby: How to iterate over a range, but in set increments?

后端 未结 4 1510
长发绾君心
长发绾君心 2020-12-07 09:52

So I\'m iterating over a range like so:

(1..100).each do |n|
    # n = 1
    # n = 2
    # n = 3
    # n = 4
    # n = 5
end

But what I\'d

相关标签:
4条回答
  • 2020-12-07 10:27

    See http://ruby-doc.org/core/classes/Range.html#M000695 for the full API.

    Basically you use the step() method. For example:

    (10..100).step(10) do |n|
        # n = 10
        # n = 20
        # n = 30
        # ...
    end
    
    0 讨论(0)
  • 2020-12-07 10:29

    Here's another, perhaps more familiar-looking way to do it:

    for i in (0..10).step(2) do
        puts i
    end
    
    0 讨论(0)
  • 2020-12-07 10:37

    You can use Numeric#step.

    0.step(30,5) do |num|
      puts "number is #{num}"
    end
    # >> number is 0
    # >> number is 5
    # >> number is 10
    # >> number is 15
    # >> number is 20
    # >> number is 25
    # >> number is 30
    
    0 讨论(0)
  • 2020-12-07 10:39
    rng.step(n=1) {| obj | block } => rng
    

    Iterates over rng, passing each nth element to the block. If the range contains numbers or strings, natural ordering is used. Otherwise step invokes succ to iterate through range elements. The following code uses class Xs, which is defined in the class-level documentation.

    range = Xs.new(1)..Xs.new(10)
    range.step(2) {|x| puts x}
    range.step(3) {|x| puts x}
    

    produces:

    1 x
    3 xxx
    5 xxxxx
    7 xxxxxxx
    9 xxxxxxxxx
    1 x
    4 xxxx
    7 xxxxxxx
    10 xxxxxxxxxx
    

    Reference: http://ruby-doc.org/core/classes/Range.html

    ......

    0 讨论(0)
提交回复
热议问题