如何生成介于0和n之间的随机数?
当前回答
范围=10..50
兰特(范围)
or
采样范围
or
range.to_a.shuffle(这将对整个数组进行随机排序,您可以从这个数组中按第一个或最后一个或任意一个选择随机数)
其他回答
也许这对你有帮助。我在应用程序中使用此功能
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
这对我来说很好
别忘了先用srand()为RNG种子。
使用rand(范围)
来自Ruby随机数:
如果你需要一个随机整数来模拟一个六面骰子,你可以使用:1+rand(6)。掷骰子可以用2+rand(6)+rand(4)模拟。最后,如果你只需要一个随机浮点数,只需要调用rand而不需要参数。
正如Marc AndréLafortune在下面的回答中所提到的(请投票),Ruby 1.9.2有自己的Random类(Marc Andreé亲自帮助调试,因此该特性的目标是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)(使用Random.new)通常不是一个好主意,正如Marc AndréLafortune(再次)在他的回答中详细解释的那样。但是,如果不使用Random.new,那么类方法rand只接受一个最大值,而不是一个Range,正如banister(大力)在注释中指出的(以及Random的文档中所记录的)。只有实例方法可以采用Range,如生成7位数的随机数所示。
这就是为什么Random.new.rand(20..30)的等效值为20+Random.rand(11),因为Random.rand(int)返回“大于或等于零且小于参数的随机整数”。20..30包括30,我需要找到一个介于0和11之间的随机数,不包括11。
可以使用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
如果您不仅要寻找数字,还要寻找十六进制或uuid,那么值得一提的是,SecureRandom模块在1.9.2+中找到了从ActiveSupport到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"
它记录在这里:Ruby1.9.3-模块:SecureRandom(lib/SecureRandom.rb)
推荐文章
- 如何找到包含匹配值的哈希键
- 未初始化的常量ActiveSupport::Dependencies::Mutex (NameError)
- 如何在Rails中找到当前的路由?
- 在Ruby中->运算符叫什么?
- Rails参数解释?
- Ruby中DateTime和Time的区别
- 如何从代理服务器后面更新Ruby Gems (ISA-NTLM)
- JS生成随机布尔值
- 如何用另一个键替换哈希键
- 添加一个CSS类<%= f.submit %>
- 从数组中获取随机项
- attr_accessor和attr_accessible的区别
- 如何从Ruby文件路径中获得没有扩展名的文件名
- 创建新用户时出现ActiveModel::ForbiddenAttributesError
- rvm安装失败:“rvm不是一个函数”