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)