如何在 Ruby 中获取随机数
如何生成 0
和 n
之间的随机数?
How do I generate a random number between 0
and n
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何生成 0
和 n
之间的随机数?
How do I generate a random number between 0
and n
?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(18)
使用
rand(range)
来自 Ruby 随机数:
正如 Marc-André Lafortune 在 他的答案如下(投票赞成),Ruby 1.9.2 有自己的
Random
类 (Marc-André 本人帮助调试,因此<该功能的 href="http://redmine.ruby-lang.org/versions/show/11" rel="noreferrer">1.9.2 目标)。例如,在这个游戏中,您需要猜测 10 个数字,你可以用以下方式初始化它们:
注意:
使用
Random.new.rand(20..30)
(使用Random.new
)通常会这不是一个好主意,正如 Marc-André Lafortune 在 他的答案(再次)。但是如果您不使用
Random.new
,则类方法rand
仅采用max
值,而不是Range
,如 banister(精力充沛地)在评论中指出(并且如Random
的文档)。 只有 实例方法 可以采用Range
,如生成一个随机数 7数字。这就是为什么
Random.new.rand(20..30)
的等价物是20 + Random.rand(11)
,因为Random.rand( int)
返回“一个大于或等于零且小于参数的随机整数。”20..30
包括 30,我需要想出一个 0 到 11 之间的随机数,不包括 11。Use
rand(range)
From Ruby Random Numbers:
As Marc-André Lafortune mentions in his answer below (go upvote it), Ruby 1.9.2 has its own
Random
class (that Marc-André himself helped to debug, hence the 1.9.2 target for that feature).For instance, in this game where you need to guess 10 numbers, you can initialize them with:
Note:
Using
Random.new.rand(20..30)
(usingRandom.new
) generally would not be a good idea, as explained in detail (again) by Marc-André Lafortune, in his answer (again).But if you don't use
Random.new
, then the class methodrand
only takes amax
value, not aRange
, as banister (energetically) points out in the comment (and as documented in the docs forRandom
). Only the instance method can take aRange
, as illustrated by generate a random number with 7 digits.This is why the equivalent of
Random.new.rand(20..30)
would be20 + Random.rand(11)
, sinceRandom.rand(int)
returns “a random integer greater than or equal to zero and less than the argument.”20..30
includes 30, I need to come up with a random number between 0 and 11, excluding 11.虽然您可以使用
rand(42-10) + 10
获取10
和42
之间的随机数(其中 10 包括在内,42 不包括),自 Ruby 1.9.3 以来有一个更好的方法,您可以调用:Available for all versions of Ruby by require my
向后移植
gem。Ruby 1.9.2 还引入了
Random
类,因此您可以创建自己的随机数生成器对象,并具有一个很好的 API:Random
类本身充当随机生成器,因此你直接调用:关于
Random.new
的注释在大多数情况下,最简单的是使用
rand
或随机.rand
。 每次需要随机数时创建一个新的随机生成器是一个非常糟糕的主意。 如果这样做,您将获得初始种子算法的随机属性,与 的属性相比,这些属性非常糟糕随机生成器本身。如果您使用
Random.new
,则应尽可能少地调用它,例如一次MyApp::Random = Random.new
并在其他地方使用它。Random.new
有用的情况如下:rand
/Random.rand 的序列
主程序可能依赖于Random对象可以编组)
While you can use
rand(42-10) + 10
to get a random number between10
and42
(where 10 is inclusive and 42 exclusive), there's a better way since Ruby 1.9.3, where you are able to call:Available for all versions of Ruby by requiring my
backports
gem.Ruby 1.9.2 also introduced the
Random
class so you can create your own random number generator objects and has a nice API:The
Random
class itself acts as a random generator, so you call directly:Notes on
Random.new
In most cases, the simplest is to use
rand
orRandom.rand
. Creating a new random generator each time you want a random number is a really bad idea. If you do this, you will get the random properties of the initial seeding algorithm which are atrocious compared to the properties of the random generator itself.If you use
Random.new
, you should thus call it as rarely as possible, for example once asMyApp::Random = Random.new
and use it everywhere else.The cases where
Random.new
is helpful are the following:rand
/Random.rand
that the main programs might be relying onRandom
objects can marshalled)如果您不仅要寻找数字,还要寻找十六进制或 uuid,值得一提的是,
SecureRandom
模块在 1.9.2+ 中找到了从ActiveSupport
到 ruby 核心的方法。 因此,不需要完整的框架:它记录在此处: Ruby 1.9.3 - 模块:安全随机 (lib/securerandom.rb)
If you're not only seeking for a number but also hex or uuid it's worth mentioning that the
SecureRandom
module found its way fromActiveSupport
to the ruby core in 1.9.2+. So without the need for a full blown framework:It's documented here: Ruby 1.9.3 - Module: SecureRandom (lib/securerandom.rb)
您可以使用
rand
方法生成随机数。 传递给rand
方法的参数应该是integer
或range
,并返回该范围内相应的随机数:You can generate a random number with the
rand
method. The argument passed to therand
method should be aninteger
or arange
, and returns a corresponding random number within the range:好吧,我想通了。 显然有一个名为 rand 的内置(?)函数:
如果有人回答了更详细的答案,我会将其标记为正确答案。
Well, I figured it out. Apparently there is a builtin (?) function called rand:
If someone answers with a more detailed answer, I'll mark that as the correct answer.
那这个呢?
What about this?
对问题的最简单回答:
Simplest answer to the question:
您只需使用
random_number
即可。如果 n 为正整数,
random_number
返回一个整数:0 <=random_number
< 名词像这样使用它:
输出将是 0 到 100 之间的任何数字。
You can simply use
random_number
.If a positive integer is given as n,
random_number
returns an integer: 0 <=random_number
< n.Use it like this:
The output will be any number between 0 and 100.
请注意,范围选项仅在较新的(我相信是 1.9+)版本的 ruby 中可用。
Note that the range option is only available in newer(1.9+ I believe) versions of ruby.
range = 10..50
rand(range)
或
range.to_a.sample
或
range.to_a.shuffle(这将打乱整个数组并您可以通过第一个或最后一个随机数或从此数组中的任何一个来选择随机数)
range = 10..50
rand(range)
or
range.to_a.sample
or
range.to_a.shuffle(this will shuffle whole array and you can pick a random number by first or last or any from this array to pick random one)
你可以做兰特(范围)
you can do rand(range)
此链接对此会有帮助;
http://ruby-doc.org/core-1.9.3/Random.html
下面对 ruby 中的随机数有一些更清晰的说明;
生成 0 到 10 之间的整数
生成 0 到 10 之间的数字
以更易读的方式
生成 10 到 15 之间的数字
包括15个
非随机的随机数
每次生成相同的数字序列
程序运行
生成10个随机数
This link is going to be helpful regarding this;
http://ruby-doc.org/core-1.9.3/Random.html
And some more clarity below over the random numbers in ruby;
Generate an integer from 0 to 10
Generate a number from 0 to 10
In a more readable way
Generate a number from 10 to 15
Including 15
Non-Random Random Numbers
Generate the same sequence of numbers every time
the program is run
Generate 10 random numbers
在 ruby 中获取随机数的简单方法是,
Easy way to get random number in ruby is,
也许它对你有帮助。 我在我的应用程序中使用它
https://github .com/rubyworks/facets/blob/5569b03b4c6fd25897444a266ffe25872284be2b/lib/core/facets/string/random.rb
它对我来说效果很好
Maybe it help you. I use this in my app
https://github.com/rubyworks/facets/blob/5569b03b4c6fd25897444a266ffe25872284be2b/lib/core/facets/string/random.rb
It works fine for me
这个怎么样?
How about this one?
不要忘记首先使用 srand() 为 RNG 播种。
Don't forget to seed the RNG with srand() first.
尝试使用 array#shuffle 方法进行随机化
Try
array#shuffle
method for randomization您可以使用 ruby rand 方法来实现此目的,如下所示:
您需要使用
n+ 1
因为 rand 方法返回任何大于或等于 0 但小于传递的参数值的随机数。You can use ruby rand method for this like below:
You need to use
n+1
as the rand method returns any random number greater than or equal to 0 but less than the passed parameter value.