如何生成介于0和n之间的随机数?
当前回答
嗯,我想通了。显然有一个内置(?)函数叫做rand:
rand(n + 1)
如果有人回答了更详细的答案,我会将其标记为正确答案。
其他回答
您可以简单地使用random_number。
如果给定正整数为n,random_number返回一个整数:0<=random_nnumber<n。
这样使用:
any_number = SecureRandom.random_number(100)
输出将是0到100之间的任何数字。
虽然您可以使用rand(42-10)+10来获得10到42之间的随机数(其中10是包含的,42是不包含的),但自Ruby 1.9.3以来,有一种更好的方法,您可以调用:
rand(10...42) # => 13
通过需要我的backports gem,可用于所有版本的Ruby。
Ruby1.9.2还引入了Random类,因此您可以创建自己的随机数生成器对象,并具有一个很好的API:
r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"
Random类本身充当随机生成器,因此可以直接调用:
Random.rand(10...42) # => same as rand(10...42)
关于Random.new的注释
在大多数情况下,最简单的方法是使用rand或Random.rand。每次你想要一个随机数时,创建一个新的随机生成器是一个非常糟糕的主意。如果您这样做,您将获得初始种子算法的随机财产,与随机生成器本身的财产相比,这些属性非常糟糕。
如果您使用Random.new,那么应该尽可能少地调用它,例如,一次调用MyApp::Random=Random.nnew,并在其他地方使用它。
Random.new有帮助的情况如下:
您正在编写一个gem,不想干扰主程序可能依赖的rand/Random.rand序列您需要单独的可重复随机数序列(例如每个线程一个)您希望能够保存和恢复可复制的随机数序列(就像随机对象可以编组一样简单)
尝试array#shuffle方法进行随机化
array = (1..10).to_a
array.shuffle.first
可以使用rand方法生成随机数。传递给rand方法的参数应为整数或范围,并返回范围内的相应随机数:
rand(9) # this generates a number between 0 to 8
rand(0 .. 9) # this generates a number between 0 to 9
rand(1 .. 50) # this generates a number between 1 to 50
#rand(m .. n) # m is the start of the number range, n is the end of number range
在ruby中获取随机数的简单方法是,
def random
(1..10).to_a.sample.to_s
end
推荐文章
- 确定ActiveRecord对象是否为New
- Rails中的OO设计:在哪里放置东西
- 如何在Heroku上重新启动rails服务器?
- respond_to块如何工作?
- 给定一个类,查看实例是否有方法(Ruby)
- rails局部模板中的可选局部变量:如何退出(defined?foo)混乱?
- 在日历应用程序中建模重复事件的最佳方法是什么?
- Ruby Bundle Symbol not found: _SSLv2_client_method (LoadError)
- 如何在c++中生成一个随机数?
- 如何创建一个私有类方法?
- rails耙任务是否提供对ActiveRecord模型的访问?
- 无法安装pg gem
- 双* (splat)操作符做什么
- 如何使用Ruby on Rails进行HTTP请求?
- (1) libcurl不支持或禁用https协议