如何在Ruby中获得随机数

这篇博客讨论了在Ruby中生成随机数的各种方式,包括使用`rand`函数,`SecureRandom`模块,以及如何指定范围。还提到了在不同版本的Ruby中生成随机数的差异和注意事项,如播种随机数生成器。文章提供了多个示例代码,适用于不同的随机数需求场景。
摘要由CSDN通过智能技术生成

如何生成0n之间的随机数?


#1楼

那这个呢?

n = 3
(0..n).to_a.sample

#2楼

如果您不仅要查找数字,而且要查找十六进制或uuid,则值得一提的是, SecureRandom模块已从ActiveSupport找到了红宝石核心。 因此,不需要完整的框架:

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"

它在此处记录: Ruby 1.9.3-模块:SecureRandom(lib / securerandom.rb)


#3楼

rand(6)    #=> gives a random number between 0 and 6 inclusively 
rand(1..6) #=> gives a random number between 1 and 6 inclusively

请注意,range选项仅在红宝石的较新版本(我相信是1.9+)中可用。


#4楼

您可以使用rand方法生成一个随机数。 传递给rand方法的参数应为integerrange ,并返回该范围内的相应随机数:

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

#5楼

好吧,我知道了。 显然有一个称为rand的内置(?)函数:

rand(n + 1)

如果有人回答的答案更详细,我会将其标记为正确答案。


#6楼

使用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]

注意:

这就是为什么Random.new.rand(20..30)等于20 + Random.rand(11) ,因为Random.rand(int)返回“一个大于或等于0且小于 0的随机整数。 自变量 。” 20..30包括30,我需要给出一个介于0到11之间的随机数(不包括11)。


#7楼

不要忘记先用srand()播种RNG。


#8楼

此链接将对此有所帮助;

http://ruby-doc.org/core-1.9.3/Random.html

以下是关于红宝石中随机数的更多说明;

生成一个从0到10的整数

puts (rand() * 10).to_i

以更易读的方式生成从0到10的数字

puts rand(10)

生成10到15之间的数字,包括15

puts rand(10..15)

非随机数

每次运行程序时生成相同的数字序列

srand(5)

产生10个随机数

puts (0..10).map{rand(0..10)}

#9楼

虽然你可以使用rand(42-10) + 10获得之间的随机数1042 (其中10是包容性和排他性42),有自红宝石1.9.3,您可以拨打其中一个更好的方法:

rand(10...42) # => 13

需要我的backports gem可用于所有版本的Ruby。

Ruby 1.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

在大多数情况下,最简单的方法是使用randRandom.rand 。 每次想要一个随机数时都创建一个新的随机数生成器是一个非常糟糕的主意 。 如果执行此操作,则将获得初始播种算法的随机属性,与随机生成器本身的属性相比,这些属性非常糟糕。

如果使用Random.new ,则应尽可能少地调用它,例如,作为MyApp::Random = Random.new一次,并在其他地方使用它。

以下是其中Random.new有用的情况:

  • 您正在编写gem,并且不想干扰主程序可能依赖的rand / Random.rand的顺序
  • 您需要单独的可重现的随机数序列(例如每个线程一个)
  • 您希望能够保存和恢复可再现的随机数序列(因为Random对象可以编组,这很容易)

#10楼

尝试使用array#shuffle方法进行随机化

array = (1..10).to_a
array.shuffle.first

#11楼

最简单的答案:

rand(0..n)

#12楼

你可以做兰德(范围)

x = rand(1..5)

#13楼

也许对您有帮助。 我在我的应用程序中使用它

https://github.com/rubyworks/facets
class String

  # Create a random String of given length, using given character set
  #
  # Character set is an Array which can contain Ranges, Arrays, Characters
  #
  # Examples
  #
  #     String.random
  #     => "D9DxFIaqR3dr8Ct1AfmFxHxqGsmA4Oz3"
  #
  #     String.random(10)
  #     => "t8BIna341S"
  #
  #     String.random(10, ['a'..'z'])
  #     => "nstpvixfri"
  #
  #     String.random(10, ['0'..'9'] )
  #     => "0982541042"
  #
  #     String.random(10, ['0'..'9','A'..'F'] )
  #     => "3EBF48AD3D"
  #
  #     BASE64_CHAR_SET =  ["A".."Z", "a".."z", "0".."9", '_', '-']
  #     String.random(10, BASE64_CHAR_SET)
  #     => "xM_1t3qcNn"
  #
  #     SPECIAL_CHARS = ["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+", "|", "/", "?", ".", ",", ";", ":", "~", "`", "[", "]", "{", "}", "<", ">"]
  #     BASE91_CHAR_SET =  ["A".."Z", "a".."z", "0".."9", SPECIAL_CHARS]
  #     String.random(10, BASE91_CHAR_SET)
  #      => "S(Z]z,J{v;"
  #
  # CREDIT: Tilo Sloboda
  #
  # SEE: https://gist.github.com/tilo/3ee8d94871d30416feba
  #
  # TODO: Move to random.rb in standard library?

  def self.random(len=32, character_set = ["A".."Z", "a".."z", "0".."9"])
    chars = character_set.map{|x| x.is_a?(Range) ? x.to_a : x }.flatten
    Array.new(len){ chars.sample }.join
  end

end

https://github.com/rubyworks/facets/blob/5569b03b4c6fd25897444a266ffe25872284be2b/lib/core/facets/string/random.rb

这对我来说可以


#14楼

这个怎么样?

num = Random.new
num.rand(1..n)

#15楼

范围= 10..50

兰德(范围)

要么

range.to_a.sample

要么

range.to_a.shuffle (这将对整个数组进行混洗,您可以在数组的第一个或最后一个或任意一个随机数中选择一个随机数)


#16楼

您可以简单地使用random_number

如果给定正整数n,则random_number返回整数:0 <= random_number <n。

像这样使用它:

any_number = SecureRandom.random_number(100) 

输出将是0到100之间的任何数字。


#17楼

获得红宝石中随机数的简单方法是

def random    
  (1..10).to_a.sample.to_s
end

#18楼

使用“ rand”功能就像这样

rand(10)


#19楼

在ruby语言中,我们有方法作为rand() 。 您可以使用此方法生成随机数。 rand()方法只有整数参数或范围。此方法的返回类型是随机整数。

 rand()          # This Will generates a random number between 0.0 to 1.0
 rand(10)        # This Will generates a number between 0 to 10
 rand(1 .. 9)    # This Will generates a number between 1 to 10
 rand(1 ... 10)  # This Will generates a number between 2 to 9

注意: rand()生成的数字足以用于简单的应用程序。

但是如果出于安全目的需要它,比如生成一次性密码,创建密码重置令牌,那么你必须使用Ruby标准库中的一个SecureRandom

require 'securerandom'

SecureRandom.random_number
=> 0.232

SecureRandom.random_number(100)
=> 72

SecureRandom.hex
=> "87694e9e5231aba6ssdfs3de39c58cdfbe307"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值