How to get a random number in Ruby
如何在
使用
从红宝石随机数:
If you needed a random integer to simulate a roll of a six-sided die, you'd use:
1 + rand(6) . A roll in craps could be simulated with2 + rand(6) + rand(6) .Finally, if you just need a random float, just call
rand with no arguments.
正如Marc Andr_Lafuture在下面的回答中所提到的(去投票),Ruby 1.9.2有自己的
例如,在这个需要猜测10个数字的游戏中,可以使用以下方法初始化它们:
1 2 | 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_Lafuture在他的回答(再次)中详细解释的那样。但是如果您不使用
Random.new ,那么类方法rand 只取max 值,而不是Range 值,正如注释(和Random 的文档中所指出的那样(大力地)。只有实例方法才能取一个Range ,如生成一个7位的随机数所示。
这就是为什么
虽然您可以使用
1 | rand(10...42) # => 13 |
通过需要我的
Ruby1.9.2还引入了
1 2 3 | r = Random.new r.rand(10...42) # => 22 r.bytes(3) # =>"rnd" |
1 | Random.rand(10...42) # => same as rand(10...42) |
关于
在大多数情况下,最简单的方法是使用
如果您使用
- 你正在写一个gem,不想干扰主程序可能依赖的
rand 和Random.rand 的顺序。 - 您需要单独的随机数的可重复序列(例如每个线程一个)
- 您希望能够保存和恢复一个可复制的随机数序列(就像
Random 对象可以编组一样简单)
如果您不仅在寻找一个数字,而且还在寻找十六进制或UUID,那么值得一提的是,
1 2 3 4 5 6 7 8 9 | 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)
您可以使用
1 2 3 4 | 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 |
好吧,我知道了。显然有一个内置的(?)函数名为rand:
1 | rand(n + 1) |
如果有人回答更详细的问题,我会把它标为正确答案。
这个怎么样?
1 2 | n = 3 (0..n).to_a.sample |
问题的最简单答案:
1 | rand(0..n) |
范围=10…50
兰德(范围)
或
范围至样本
或
range.to-a.shuffle(这将对整个数组进行无序播放,您可以从该数组中按第一个或最后一个或任意选择一个随机数字来随机播放)
1 2 | rand(6) #=> gives a random number between 0 and 6 inclusively rand(1..6) #=> gives a random number between 1 and 6 inclusively |
请注意,range选项仅在Ruby的较新版本(我相信是1.9以上)中可用。
您只需使用
如果一个正整数被指定为n,那么 这样使用:
1 | any_number = SecureRandom.random_number(100) |
输出将是0到100之间的任意数字。
关于这一点,这个链接会很有帮助;
http://ruby-doc.org/core-1.9.3/random.html
下面的Ruby中的随机数更清晰一些;
生成从0到10的整数
1 | puts (rand() * 10).to_i |
生成从0到10的数字以更易读的方式
1 | puts rand(10) |
生成10到15之间的数字包括15
1 | puts rand(10..15) |
非随机随机数
每次生成相同的数字序列程序正在运行
1 | srand(5) |
生成10个随机数
1 | puts (0..10).map{rand(0..10)} |
你可以做兰德(范围)
1 | x = rand(1..5) |
也许这对你有帮助。我在我的应用程序中使用这个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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/5569b03b4c6fd2589744a26ffe2587284be2b/lib/core/facets/string/random.rb
对我来说很好
这个怎么样?
1 2 | num = Random.new num.rand(1..n) |
在Ruby中获取随机数的简单方法是,
1 2 3 | def random (1..10).to_a.sample.to_s end |
随机试验
1 2 | array = (1..10).to_a array.shuffle.first |
像这样使用"rand"函数
不要忘记先用srand()为rng种子。