Von*_*onC 944
使用 rand(range)
来自Ruby随机数:
如果你需要一个随机整数来模拟一个六面骰子的卷,你可以使用:
1 + rand(6).可以模拟掷骰子2 + rand(6) + rand(6).最后,如果你只需要一个随机浮点数,只需要不
rand带参数调用.
正如Marc-AndréLafortune在下面的回答中提到的那样(向上看),Ruby 1.9.2有自己的Random类(Marc-André自己帮助调试,因此该功能的1.9.2目标).
例如,在这个你需要猜测10个数字的游戏中,你可以用以下方法初始化它们:
10.times.map{ 20 + Random.rand(11) }
#=> [26, 26, 22, 20, 30, 26, 23, 23, 25, 22]
Run Code Online (Sandbox Code Playgroud)
注意:
使用Random.new.rand(20..30)(使用Random.new)通常不是一个好主意,正如Marc-AndréLafortune(再次)在他的回答(再次)中详细解释的那样.
但是,如果你不使用Random.new,那么类方法rand只需要一个max值,而不是一个Range,因为栏杆的评论(大力)所指出的(并且记录在文档的Random).只有实例方法可以采用a Range,如生成7位数的随机数所示.
这就是为什么相当于Random.new.rand(20..30)将是20 + Random.rand(11),由于Random.rand(int)返回"的随机整数大于或等于零且小于参数 ".20..30包括30,我需要拿出0和11之间的随机数,但不包括11.
Mar*_*une 589
虽然你可以rand(42-10) + 10用来获取10和之间的随机数42(其中10是包含的,42是独占的),但是从Ruby 1.9.3开始,你可以调用以下更好的方法:
rand(10...42) # => 13
Run Code Online (Sandbox Code Playgroud)
适用于所有版本的Ruby,需要我的backports宝石.
Ruby 1.9.2还引入了Random该类,因此您可以创建自己的随机数生成器对象并具有一个很好的API:
r = Random.new
r.rand(10...42) # => 22
r.bytes(3) # => "rnd"
Run Code Online (Sandbox Code Playgroud)
在Random类本身作为一个随机数生成器,让您直接拨打:
Random.rand(10...42) # => same as rand(10...42)
Run Code Online (Sandbox Code Playgroud)
注意事项 Random.new
在大多数情况下,最简单的是使用rand或Random.rand.每次想要一个随机数时创建一个新的随机生成器是一个非常糟糕的主意.如果这样做,您将获得初始种子算法的随机属性,这些属性与随机生成器本身的属性相比是非常糟糕的.
如果你使用Random.new,你应该尽可能少地调用它,例如一次,MyApp::Random = Random.new并在其他地方使用它.
Random.new有用的案例如下:
rand/ Random.rand主程序可能依靠Random编组对象)Tho*_*ser 46
如果您不仅要寻找一个数字而且还要求十六进制或uuid,那么值得一提的是该SecureRandom模块从ActiveSupport1.9.2+中的ruby核心开始.所以不需要一个完整的框架:
require 'securerandom'
p SecureRandom.random_number(100) #=> 15
p SecureRandom.random_number(100) #=> 88
p SecureRandom.random_number #=> 0.596506046187744
p SecureRandom.random_number #=> 0.350621695741409
p SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
Run Code Online (Sandbox Code Playgroud)
它在此处记录:Ruby 1.9.3 - 模块:SecureRandom(lib/securerandom.rb)
小智 36
您可以使用该rand方法生成随机数.传递给rand方法的参数应该是a integer或a range,并返回范围内的相应随机数:
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
Run Code Online (Sandbox Code Playgroud)
Mar*_*osi 21
好吧,我明白了.显然有一个名为rand的内置(?)函数:
rand(n + 1)
Run Code Online (Sandbox Code Playgroud)
如果有人用更详细的答案回答,我会将其标记为正确答案.
Rim*_*ian 18
那这个呢?
n = 3
(0..n).to_a.sample
Run Code Online (Sandbox Code Playgroud)
你可以简单地使用random_number.
如果给定正整数为n,则random_number返回一个整数:0 <= random_number<n.
像这样使用它:
any_number = SecureRandom.random_number(100)
Run Code Online (Sandbox Code Playgroud)
输出将是0到100之间的任何数字.
rand(6) #=> gives a random number between 0 and 6 inclusively
rand(1..6) #=> gives a random number between 1 and 6 inclusively
Run Code Online (Sandbox Code Playgroud)
请注意,范围选项仅适用于较新的(1.9+我相信)版本的ruby.
小智 6
范围= 10..50
兰特(范围)
要么
range.to_a.sample
要么
range.to_a.shuffle(这将对整个数组进行洗牌,您可以通过第一个或最后一个选择一个随机数,或者从该数组中随机选择一个随机数)
| 归档时间: |
|
| 查看次数: |
516753 次 |
| 最近记录: |