ruby随机字符串




如何在Ruby中获得一个随机数字 (12)

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


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


也许它会帮助你。 我在我的应用程序中使用这个

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

这对我来说可以


你可以简单地使用random_number

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

像这样使用它:

any_number = SecureRandom.random_number(100) 

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


使用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) (使用Random.new )通常不是一个好主意,正如Marc-AndréLafortune在再次( 他)的回答中再次详细解释的那样。

  • 但是如果你没有使用Random.new ,那么类方法rand只会取得一个max ,而不是一个Range ,因为在评论中(如Random文档中所记录的)注解(精力充沛)。 只有实例方法可以采用Range ,如通过生成7位数的随机数所示。

这就是为什么Random.new.rand(20..30)等价于20 + Random.rand(11) ,因为Random.rand(int)返回“一个大于或等于零且小于争论20..30包括30,我需要拿出一个0到11之间的随机数,不包括11。


如果你不只是在寻找一个数字,而且还需要十六进制或uuid,值得一提的是, SecureRandom模块在ActiveSupport找到了从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"

这里记录它: Ruby 1.9.3 - 模块:SecureRandom(lib / securerandom.rb)


对这个问题最简单的回答:

rand(0..n)

您可以使用rand方法生成一个随机数。 传递给rand方法的参数应该是integerrange ,并返回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

范围= 10..50

兰特(范围)

要么

range.to_a.sample

要么

range.to_a.shuffle (这将洗牌整个数组,你可以先选择一个随机数或最后一个或任意数组来选择随机数)


这个怎么样?

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

这个链接将对此有所帮助;

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

下面还有一些关于ruby中随机数的更加清晰的说明;

生成一个从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)}

那这个呢?

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

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

请注意,范围选项只适用于较新的(1.9 +我相信)版本的红宝石。





random