Search code examples
rubyrandomrange

How to generate a random number between a and b in Ruby?


To generate a random number between 3 and 10, for example, I use: rand(8) + 3

Is there a nicer way to do this (something like rand(3, 10)) ?


Solution

  • UPDATE: Ruby 1.9.3 Kernel#rand also accepts ranges

    rand(a..b)
    

    http://www.rubyinside.com/ruby-1-9-3-introduction-and-changes-5428.html

    Converting to array may be too expensive, and it's unnecessary.


    (a..b).to_a.sample
    

    Or

    [*a..b].sample
    

    Array#sample

    Standard in Ruby 1.8.7+.
    Note: was named #choice in 1.8.7 and renamed in later versions.

    But anyway, generating array need resources, and solution you already wrote is the best, you can do.