Rubyで乱数を取得する方法



How Get Random Number Ruby



解決:

使用するrand(範囲)

Ruby乱数から:



6面ダイスのロールをシミュレートするためにランダムな整数が必要な場合は、次を使用します。1 + rand(6)。クラップスのロールは、2 + rand(6)+ rand(6)。

最後に、ランダムフロートが必要な場合は、引数のないrand。




Marc-AndréLafortuneが以下の回答で言及しているように(賛成してください)、Ruby1.9.2には独自の機能があります。ランダムクラス(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、次にクラスメソッドランドは最大値であり、手すりが(精力的に)コメントで指摘しているように(そしてのドキュメントに記載されているように)範囲ランダム)。インスタンスメソッドのみが取ることができます範囲。7桁の乱数を生成することで示されます。

これが、Random.new.rand(20..30)は20 + Random.rand(11)、以降Random.rand(int)は、ゼロ以上のランダムな整数を返し、 議論よりも少ない20..30には30が含まれ、11を除く0から11までの乱数を考え出す必要があります。


あなたが使用できる間rand(42-10)+ 10は、間の乱数を取得します10と42(10は包括的で42は排他的)、Ruby 1.9.3以降、より良い方法があります。ここでは、次のように呼び出すことができます。

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

私の要求により、Rubyのすべてのバージョンで利用可能バックポートの宝石。

Ruby1.9.2も導入されましたランダムクラス。独自の乱数ジェネレータオブジェクトを作成でき、優れたAPIを備えています。

r = Random.new r.rand(10 ... 42)#=> 22 r.bytes(3)#=> 'rnd'

NSランダムクラス自体はランダムジェネレーターとして機能するため、次のように直接呼び出します。

Random.rand(10 ... 42)#=> rand(10 ... 42)と同じ

に関する注記Random.new

ほとんどの場合、最も簡単なのはランドまたはRandom.rand。乱数が必要になるたびに新しいランダムジェネレータを作成することは、 本当に悪い考え 。これを行うと、ランダムジェネレータ自体のプロパティと比較してひどい初期シードアルゴリズムのランダムプロパティを取得します。

使用する場合Random.new、したがって、それを呼び出す必要があります できるだけまれに 、たとえば一度MyApp :: Random = Random.newで、他の場所で使用します。

の場合Random.newが役立つのは次のとおりです。

  • あなたは宝石を書いていて、のシーケンスに干渉したくない行/メインプログラムが依存している可能性のあるRandom.rand
  • 乱数の再現可能なシーケンスを個別に作成する必要があります(スレッドごとに1つなど)
  • 再現可能な乱数のシーケンスを保存して再開できるようにしたい(簡単にランダムオブジェクトはマーシャリングできます)

数値だけでなく、16進数またはuuidも探している場合は、SecureRandomモジュールは1.9.2以降のrubyコアへの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)